有很多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
}