首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何改进当前代码以获得正确的结果

如何改进当前代码以获得正确的结果
EN

Stack Overflow用户
提问于 2015-05-01 23:57:19
回答 2查看 61关注 0票数 2

我有一些活动。根据插入day.like,每周在应用程序中显示事件

代码语言:javascript
复制
event one > Friday
event two > sat
event three > sun

因此,每周五凌晨2点到2点在应用程序中显示事件1

我搞不懂如何管理凌晨2点到凌晨2点我已经创建了一个逻辑,但它无法给我正确的计算

代码语言:javascript
复制
    $input = time();
                $day = date('D', $input );

                switch ($day) {
                    case 'Sun':
                        $finalday='0';
                        break;
                    case 'Mon':
                        $finalday='1';
                        break;
                    case 'Tue':
                        $finalday='2';
                        break;
                    case 'Wed':
                        $finalday='3';
                        break;
                    case 'Thu':
                        $finalday='4';
                        break;
                    case 'Fri':
                        $finalday='5';
                        break;
                    case 'Sat':
                        $finalday='6';
                        break;
                }




                $now = time();
                $event_time = strtotime("02:00 am");

                if( ($now - $event_time) < 0) // 5 minutes * 60 seconds, replace with 300 if you'd like
                {
                    //before day
                    if($finalday=='0')
                    {

                        $query_day='6';
                    }
                    else
                    {
                        $query_day=$finalday-1;
                    }


                }
                else
                {
//current day
                    $query_day=$finalday;
                }

如何根据插入日期显示每个事件在凌晨2点到2点之间的准确时间

假设现在是中午12点,所以今天是星期五,但事件一将从凌晨2点播放到下一个1.59AM,然后事件2将从凌晨2点播放到下午1.59AM(星期六)。

通过这种方式,将显示下一个弱自动事件

EN

回答 2

Stack Overflow用户

发布于 2015-05-02 00:20:23

试着这样做,让您的代码看起来更优雅一点,而不是那么笨拙

代码语言:javascript
复制
$dayOfWeek = date('w'); //0 for Sunday through 6 for Saturday
$hourOfDay = date('H'); //0-23
$eventOne = null;
$eventTwo = null;
$eventThree = null;

//logic structure to set events
if($hourOfDay >= 0 && $hourOfDay < 2){
    $dayOfWeek -= 1; //set to previous day if earlier than 2AM
    $dayOfWeek = $dayOfWeek == 0 ? 6 : $dayOfWeek; //quick check to set to Sunday if day was on Monday
    $eventOne = $dayOfWeek;
    $eventTwo = $dayOfWeek+1;
    $eventThree = $dayOfWeek+2;

    //single line if statements to correct weekly overflow
    if($eventTwo == 7) $eventTwo = 0;
    if($eventThree == 7) $eventThree = 0;
    if($eventThree == 8) $eventThree = 1;
}else{

    $eventOne = $dayOfWeek;
    $eventTwo = $dayOfWeek+1;
    $eventThree = $dayOfWeek+2;

    //single line if statements to correct weekly overflow
    if($eventTwo == 7) $eventTwo = 0;
    if($eventThree == 7) $eventThree = 0;
    if($eventThree == 8) $eventThree = 1;
}



function getDayOfEvent($event){
    switch($event){
        case 0: return "Sunday"; break;
        case 1: return "Monday"; break;
        case 2: return "Tuesday"; break;
        case 3: return "Wednesay"; break;
        case 4: return "Thursday"; break;
        case 5: return "Friday"; break;
        case 6: return "Saturday"; break;
    }   
}

print "Event One: ". getDayOfEvent($eventOne)."\nEvent Two: ".getDayOfEvent($eventTwo)."\nEvent Three: ".getDayOfEvent($eventThree);

如果这样的东西对你有效,请让我知道。

这是一个粘贴在CodePad上的文件,如果你想使用http://codepad.org/SLcTeGEt,你可以稍微修改一下代码

票数 0
EN

Stack Overflow用户

发布于 2015-05-02 02:17:52

试试这个程序..。也许就是你想要的。(你的问题非常令人困惑。)

代码语言:javascript
复制
/* Day Of Week 0 = Sun ... 6 = Sat
 * ---------------------------------
 * Day      Hour     Result    Case
 * ---------------------------------
 *  5     00 - 02   No event    C
 *  5     02 - 24   Event 1     B
 *  6     00 - 02   Event 1     A
 *  6     02 - 24   Event 2     B
 *  0     00 - 02   Event 2     A
 *  0     02 - 24   Event 3     B
 *  1     00 - 02   Event 3     A
 *  1     02 - 24   No Event    C
 * Other  Other     No Event    C
 * ---------------------------------
 */

function getEvent( $timestamp, $eventTime ) {
    $d = (int) date( 'w', $timestamp ); // Day
    $h = (int) date( 'G', $timestamp ); // Hour
    $event = $h < $eventTime && ( $d > 5 || $d < 2 )  // Case A
        ? ( $d + 2 ) % 7                              // Case A Result
        : ( $h >= $eventTime && ( $d > 4 || $d == 0 ) // Case B
            ? ( $d + 3 ) % 7                          // Case B Result
            : null );                                 // Case C Result
    printf ( "\n%s %02d:00 :: %s",                    // ... and show
             date( 'D', strtotime( "Sunday +{$d} days" ) ),
             $h, $event ? "Event $event" : 'No event' );
}

$eventTime = 2;
echo '<pre>';
/* Testing the getEvent function */
for ( $timestamp = mktime( 23, 0, 0, 4, 30, 2015 ); // Thu at 23:00
      $timestamp <= mktime( 22, 0, 0, 5, 7, 2015 ); // Thu at 22:00
      $timestamp += 3600 * 2 ) {                    // Each 2 hours
    getEvent( $timestamp, $eventTime );
}

?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29990403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档