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_Php Carbon - Fatal编程技术网

如何使用PHP检查当前时间是否落在特定计划中(如果不是,则计算下一次)?

如何使用PHP检查当前时间是否落在特定计划中(如果不是,则计算下一次)?,php,date,datetime,time,php-carbon,Php,Date,Datetime,Time,Php Carbon,我正在尝试编写一个任务调度器类程序(或多或少是一个类比),如果当前时间在特定的计划内,则需要打印该程序。如果没有,那么它需要找到下一个运行时间(即未来最接近的时间,该时间在计划范围内)并打印出来 计划格式为JSON,如下所示: [ {"days": ["Mon","Tue","Wed","Thu","Fri"], "start_time":"09:00", "end_time":"18:00"}, {"days": ["Sat"],"start_time":"06:00","end_time

我正在尝试编写一个任务调度器类程序(或多或少是一个类比),如果当前时间在特定的计划内,则需要打印该程序。如果没有,那么它需要找到下一个运行时间(即未来最接近的时间,该时间在计划范围内)并打印出来

计划格式为JSON,如下所示:

[
 {"days": ["Mon","Tue","Wed","Thu","Fri"], "start_time":"09:00", "end_time":"18:00"},
 {"days": ["Sat"],"start_time":"06:00","end_time":"12:00"}
]
上面的意思是,允许的日程安排在工作日的上午9点到下午6点之间,周六的上午6点到下午12点之间,周日没有任何事情发生(这只是一个例子,可能有很多项目,也可能有重叠)

假设今天是星期四19:00,那么它将打印“否”,然后是最近的时间星期五09:00

另一个例子,假设它是
sat13:00
,那么它将再次打印“NO”,后面是
mon0900:00
,因为周日不在日程安排中

另一方面,如果现在是
Tue 11:00
,那么它只会打印“YES”(因为它在上面的时间表中)

我尝试过实现它,但我认为我的实现相当缓慢,因为我每天都在循环检查它何时通过,我确信一定存在一种更快的方法来直接计算未来时间

谢谢你的帮助


另外,时区始终为UTC(如果有必要)。我已经安装了
Carbon
,并且可以使用任何库,如果这样做可以使工作更轻松。

如果一周中的某一天不在天数列表中,您可以跳过内部循环。虽然您的“打开/关闭”格式确实可以防止重复数据,但它会使查找下一个日期变得更加困难。如果未打开,则必须将$current移动到第二天,在外部维度上循环,查看该天是否在天数列表中,直到找到为止。如果将数据更改为
[dow=>[open,close],dow2=>…]
,并按键进行排序,则只需移动到数组中的下一个元素(如果溢出超过最后一个元素,则移动到第一个元素)。