我需要检查$ now(UTC时间)是否在某个时间间隔之前,之后或之间。
所以,如果$ end在午夜之间(例如$start = '18:00'
和$end = '22:00'
),也没问题。
但经过一些测试后,我做了#34;发现"如果$ end是在午夜之后(在我的例子中可以!),这可能是一个问题。例如。 $start = '20:00'
和$end = '04:00'
。在这种情况下,$ start是在2017年9月19日,结束将在2017年9月20日。
这是代码的第一部分(一些函数来自我自己编写的SupportDate类)。
/**
* CASE #1 >> NOW can be AFTER start and end time.
* E.g. now == 21.30 and start == 18.00 and end == 21.00
*
* CASE #2 >> NOW can be BEFORE start and end time.
* E.g. Now == 17.00, start == 18, end == 21.00
*
* CASE #3 >> NOW can be BETWEEN start and end time.
* E.g. Now == 19, start == 18, end = 21.00
*/
// CASE #1
if ( ( $support->isExpired($start) === true ) && ( $support->isExpired($end) === true ) ) {
echo 'CASE #1 - siamo ben oltre sia l\'inizio che la fine';
}
// CASE #2
if ( ( $support->isExpired($start) === false ) && ( $support->isExpired($end) === false ) ) {
echo 'CASE #2 - siamo ben PRIMA sia dell\'inizio che della fine';
}
// CASE #3
if ( ( $support->isExpired($start) === true ) && ( $support->isExpired($end) === false ) ) {
echo 'CASE #3 - siamo TRA l\'inizio E la fine';
}
(这是isExpired方法)
public function isExpired($date=null,$qty=1,$interval='seconds') {
$now = new \DateTime(null, new \DateTimeZone("UTC"));
$expiry_date = new \DateTime($date, new \DateTimeZone("UTC"));
date_add($expiry_date, date_interval_create_from_date_string($qty.' '.$interval));
if ($now >= $expiry_date) {
return true;
} else {
return false;
}
}
我可以复制3个案例并应用先前的检查(伪代码:如果$ start> $ end else ....)并反转检查false / true但是,我认为有一个更好的模式来获取我的3例。
谢谢!
答案 0 :(得分:0)
您需要添加时区信息,但我使用以下内容:
context
答案 1 :(得分:0)
基本逻辑是这样,如果你使用datetime对象,可能需要调整实际的比较操作:
if($start > $end) return ($now >= $start || $now <= $end);
else return ($now >= $start && $now <= $end);
这假设您只使用时间数据而不是日期数据。