当时间范围超过一天时,定期检查时间是否在一个范围内


PHP Recurently check if time is in a range, when the range spans more than one day

有很多SO问题向您展示如何检查日期时间是否在一个范围内,但是当您想要重复执行并且日期范围跨越超过一天时,没有太多帮助。

举个例子,你如何检查它是否在星期二的22:00到下星期四的07:30之间?那你每周都是怎么做的呢?

PHP的DataTime类的构造函数接受相对参数this xxxday,它可以用来给出相对于当前时间的下一个'xxxday'。

例如,new DateTime('next friday')将为您提供一个datetime对象,表示相对于当前日期的下一个星期五的00:00:00。如果当前日期星期五,则该日期将返回。

所以如果你定义

$end = new DateTime(next thursday 07:30);

$end是一个DateTime对象,表示当前时间的下一个星期二的22:00,如果今天是星期二,则表示今天的20:00。然后可以去掉末尾的间隔,用

开始
$start = clone $end;
$start = $end->sub(new DateInterval('P1DT9H30M'));

为您提供一个DateTime对象,在下一个星期四从当前时间开始的07:30之前1天9小时30分钟,或从当前时间开始的下一个星期四之前的星期二22:00。

然后你可以得到当前日期时间,看看它是否在开始和结束日期时间之间:

$now = new DateTime();
if( $now >= $start && $now <= $end ) {
    //In interval
}