如何使用PHP检查当前时间是否落在特定计划中(如果不是,则计算下一次)?
我正在尝试编写一个任务调度器类程序(或多或少是一个类比),如果当前时间在特定的计划内,则需要打印该程序。如果没有,那么它需要找到下一个运行时间(即未来最接近的时间,该时间在计划范围内)并打印出来 计划格式为JSON,如下所示:如何使用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
[
{"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=>…]
,并按键进行排序,则只需移动到数组中的下一个元素(如果溢出超过最后一个元素,则移动到第一个元素)。