Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何改进我当前的代码以获得正确的结果_Php_Date_Datetime_Time_Weekday - Fatal编程技术网

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

Php 如何改进我当前的代码以获得正确的结果,php,date,datetime,time,weekday,Php,Date,Datetime,Time,Weekday,我有一些活动。根据插入的日期,每周在应用程序中显示事件。如 event one > Friday event two > sat event three > sun 因此,每周五凌晨2点至凌晨2点举行一场活动 我不知道如何管理和凌晨2点到2点。我已经创造了一个逻辑,但它不能给我正确的计算 $input = time(); $day = date('D', $input ); switch ($day)

我有一些活动。根据插入的日期,每周在应用程序中显示事件。如

event one > Friday
event two > sat
event three > sun
因此,每周五凌晨2点至凌晨2点举行一场活动

我不知道如何管理和凌晨2点到2点。我已经创造了一个逻辑,但它不能给我正确的计算

    $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;
                }
$input=time();
$day=日期('D',$input);
交换机(天){
案例“Sun”:
$finalday='0';
打破
案件‘星期一’:
$finalday='1';
打破
案件‘星期二’:
$finalday='2';
打破
案件‘Wed’:
$finalday='3';
打破
案例“Thu”:
$finalday='4';
打破
案件‘星期五’:
$finalday='5';
打破
“Sat”案例:
$finalday='6';
打破
}
$now=时间();
$event_time=strottime(“凌晨02:00”);
如果($now-$event_time)<0)//5分钟*60秒,如果愿意,请替换为300
{
//白天之前
如果($finalday='0')
{
$query_day='6';
}
其他的
{
$query_day=$finalday-1;
}
}
其他的
{
//今日
$query\u day=$finalday;
}
根据插入的日期,如何精确显示每个事件的凌晨2点到凌晨2点

假设现在是上午12点,所以当天是星期五,但活动一将在凌晨2点至下一个凌晨1点59分播放,那么活动二将在凌晨2点至凌晨1点59分(周六)播放


通过这种方式,下一个事件将显示出来

尝试这样做,只是为了让代码看起来更优雅,不那么笨重

$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);
$dayOfWeek=date('w')//周日0到周六6
$hourOfDay=日期('H')//0-23
$eventOne=null;
$eventTwo=null;
$eventThree=null;
//设置事件的逻辑结构
如果($hourOfDay>=0&$hourOfDay<2){
$dayOfWeek-=1;//如果早于凌晨2点,则设置为前一天
$dayOfWeek=$dayOfWeek==0?6:$dayOfWeek;//如果星期一是星期一,则快速检查设置为星期日
$eventOne=$dayOfWeek;
$eventTwo=$dayOfWeek+1;
$eventThree=$dayOfWeek+2;
//用于纠正每周溢出的单行if语句
如果($eventTwo==7)$eventTwo=0;
如果($eventThree==7)$eventThree=0;
如果($eventThree==8)$eventThree=1;
}否则{
$eventOne=$dayOfWeek;
$eventTwo=$dayOfWeek+1;
$eventThree=$dayOfWeek+2;
//用于纠正每周溢出的单行if语句
如果($eventTwo==7)$eventTwo=0;
如果($eventThree==7)$eventThree=0;
如果($eventThree==8)$eventThree=1;
}
函数getDayOfEvent($event){
开关($事件){
案例0:返回“星期日”;休息;
案例1:返回“星期一”;休息;
案例2:返回“星期二”;休息;
案例3:返回“星期三”;休息;
案例4:返回“星期四”;休息;
案例5:返回“星期五”;休息;
案例6:返回“星期六”;休息;
}   
}
打印“事件一:”。getDayOfEvent($eventOne)。“\nEvent 2:”.getDayOfEvent($Event2)。“\nEvent 3:”.getDayOfEvent($Event3);
如果这样对你有用,请告诉我。很抱歉,我在翻译你的英语时遇到了困难,我尽了最大的努力:)我希望这对你有帮助,如果没有,请让我知道,我会帮助你修复它,这样它就可以了


这里有一个粘贴在代码板上的程序,如果你想玩的话,你可以在这里玩一下代码。

试试这个程序。。。也许这就是你想要的。(你的问题很令人困惑。)
/* 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天=太阳。。。6=Sat
* ---------------------------------
*日小时结果案例
* ---------------------------------
*5 00-02无事件C
*5 02-24事件1 B
*6 00-02事件1 A
*6 02-24事件2 B
*0 00-02事件2 A
*0 02-24事件3 B
*100-02事件3 A
*1 02-24无事件C
*其他无事件C
* ---------------------------------
*/
函数getEvent($timestamp,$eventTime){
$d=(int)日期('w',$timestamp);//天
$h=(int)日期('G',$timestamp);//小时
$event=$h<$eventTime&($d>5 | |$d<2)//案例A
($d+2)%7//案例A结果
:($h>=$eventTime&($d>4 | |$d==0)//案例B
($d+3)%7//案例B结果
:null);//案例C结果
printf(“\n%s%02d:00::%s”,/…并显示
日期('D',标准时间(“星期日+{$D}天”),
$h,$event?“event$event”:“无事件”);
}
$eventTime=2;
回声';
/*测试getEvent函数*/
对于($timestamp=mktime(23,0,0,4,302015);//周四23:00
$timestamp

是否要显示从第1天凌晨2点到第2天凌晨2点的24个时段内的事件?请使用
$finalday=date('w',$input);
而不是那种难看的开关语句同样对于
$event\u time
将其设置为
$event\u time=date('H')
这可能会使操作代码更容易,逻辑语句也更容易实现。更新我的问题@MarkHill