2016-11-16 82 views
-1

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

作为一个例子,你如何检查它是否在星期二22:00到星期三07:30?那周你怎么做那一周?

+0

请[编辑]你的问题,以显示[你有什么到目前为止已经试过(HTTP:/ /whathaveyoutried.com)。您应该包含您遇到问题的代码[mcve],然后我们可以尝试帮助解决特定问题。你还应该阅读[问]。 –

+0

@TobySpeight如果我把我所尝试过的方法问一个答案,我自己的问题是有道理的[正如所鼓励的那样](https://stackoverflow.blog/2011/07/its-ok-to-ask-and-回答你自己的问题/)无论如何,“你将如何检查它是否在星期二的22:00到接下来的星期四的07:30之间?”似乎是最小的,完整的和可验证的。我注意到你的“你到目前为止所尝试的”链接不在现场,你能指出任何SO指导吗? – Dom

回答

1

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

因此,例如,new DateTime('next friday')将为您提供一个日期时间对象,表示下一个星期五相对于当天的00:00:00。如果当天的星期五,那么这是将返回的日期。

所以,如果你定义

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

然后$end是当今表示对下周二22:00从当前时间,或20:00如果今天是星期二DateTime对象。然后可以采取间隔关闭端从当前时间之前获得与

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

它给你DateTime对象1天,9小时30分钟开始到07:30在星期四,或在当前时间下周四前的星期二22:00。

然后你就可以获取当前日期时间,看看是否开始和结束日期时间之间的:

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