Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.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 - Fatal编程技术网

Php 如何确定当前日期/时间是否在计划内?

Php 如何确定当前日期/时间是否在计划内?,php,Php,鉴于时间表: { "start_day": "Monday", "end_day": "Friday", "start_time": "9:00 AM", "end_time": "6:00 PM" } 如何确定指定时区中的当前时间是否在上述给定时间表内?PHP中是否有任何函数可以帮助我?我预见的问题: 处理时区 给定的计划没有提供年份信息,但我想我可以假设它适用于当前年份 处理天数范围(提供了星期一和星期五;我如何知道其间有星期二、星期三和星期四 更新1: 更改JSON,使其

鉴于时间表:

{
  "start_day": "Monday",
  "end_day": "Friday",
  "start_time": "9:00 AM",
  "end_time": "6:00 PM"
}
如何确定指定时区中的当前时间是否在上述给定时间表内?PHP中是否有任何函数可以帮助我?我预见的问题:

  • 处理时区
  • 给定的计划没有提供年份信息,但我想我可以假设它适用于当前年份
  • 处理天数范围(提供了星期一和星期五;我如何知道其间有星期二、星期三和星期四
  • 更新1:

    更改JSON,使其包含所有天/时间:

    {
      "start_day": "Monday",
      "end_day": "Sunday",
      "start_time": "12:00 AM",
      "end_time": "11:59 PM"
    }
    
    然后将
    $now
    作业更改为
    $now=new DateTime(“下个月星期六上午10点,$timezone”);


    没有输出任何内容。

    您可以使用以下代码。我在该示例中检查所有可用时区:

    <?php
    
    $json = <<<EOF
    {
      "start_day": "Friday",
      "end_day": "Sunday",
      "start_time": "9:00 AM",
      "end_time": "6:00 PM"
    }
    EOF;
    
    $when = json_decode($json);
    
    // Get weekdays between start_day and end_day.
    $start_day = new DateTime($start);
    $nstart_day = (int) $start_day->format('N');
    $end_day = new DateTime($end);
    $nend_day = (int) $end_day->format('N');
    
    // If the numeric end day has a lower value than the start
    // day, we add "1 week" to the end day
    if($nend_day < $nstart_day) {
        $end_day->modify('+1 week');
    }
    // Add one day to end_day to include it into the return array
    $end_day->modify('+1 day');
    
    // Create a DatePeriod to iterate from start to end
    $interval = new DateInterval('P1D');
    $period = new DatePeriod($start_day, $interval, $end_day);
    $days_in_between = array();
    foreach($period as $day) {
        $days_in_between []= $day->format('l');
    }
    
    
    // Check for all timezones in this example
    foreach(DateTimeZone::listIdentifiers() as $tzid) {
        $timezone = new DateTimeZone($tzid);
        // Current time in that timezone
        $now = new DateTime("now", $timezone);
        // start_time in that timezone
        $start_time = new DateTime($when->start_time, $timezone);
        // end_time in that timezone
        $end_time = new DateTime($when->end_time, $timezone);
        // Get weekday for that timezone
        $day = $now->format('l');
    
        if($now >= $start_time && $now <= $end_time
            && in_array($day, $days_in_between))
        {
            printf("In %s the current time %s is between %s and %s (%s-%s)\n",
                $tzid, $now->format('H:i:s'), $when->start_time, $when->end_time,
                    $when->start_day, $when->end_day);
        }
    }
    

    看看,哪些时间处理时区1.这些时间也在指定的时区内吗?2.所以说你只需要一个“简单的”if语句告诉您当前时间是否在计划之间,对吗?3.您尝试过什么吗?计划没有指定时区。我一直在玩一些PHP函数,试图让事情正常运行,主要是
    strotime
    。为什么要检查所有时区?这是如何检查周二上午9点到下午6点的?这只是一个例子,这就是我检查所有时区的原因。在你的应用程序中,你必须只检查目标时区,当然。你没有命名它。
    ,这如何检查星期二上午9点到下午6点?
    好的,我知道你如何计算天数并在数组中进行
    检查。如果检查时间表的时间不是当前时间?说是过去或未来的某个时间?我猜你下周的
    是任意的。它可能是下个月的
    或上周的
    ,对吗?我猜如果检查的时间不是现在的
    ,那么需要对这些任意添加的时间做些什么???下周的
    把戏将会成功rk,即使日期是在过去或未来。它只是使用日期名称。