比较两个日期或比较两个日期减去8小时

时间:2018-02-02 02:15:30

标签: php

好的,很奇怪。

如果学校因我的孩子县关闭,请写一个脚本来检查XML Feed。每个条目都有一个“生效日期”节点,即学校结束公告生效的日期。

我正在做的是比较生效日期是否早于当前时间,这意味着在午夜之后,当天的结束将起作用。但如果他们事先在傍晚/晚上关闭学校呢?

我需要检查生效日期是否大于今天,但是从下午4点而不是午夜开始。

date_default_timezone_set('America/New_York');
$date_effective = $announcement->date_effective;
// format of xml feed datetime - 2018-02-02 00:00:00.000000
$date = new DateTime($date_effective);
$now = new DateTime();
// Here is where I need help, not sure how to word this
// if($date < $now || $date < $now - '8 hours') {
if($date < $now) {
    // iterate through cases based on status
}

2 个答案:

答案 0 :(得分:2)

使用strotime代替

<?php

date_default_timezone_set('America/New_York');
$date_effective = $announcement->date_effective;

$date = strtotime($date_effective);
// since 1 hr is 3600 secs so multiply this by 8 which result to 28800
$now = strtotime('now') - 28800; 

if($date < $now) {
  // iterate through cases based on status
}

DEMO

答案 1 :(得分:2)

使用\DateTime::sub结合代表时差的\DateInterval

$now  = new DateTime;
$then = (clone $now)->sub(DateInterval::createFromDateString('8 hours'));
if ($date < $now || $date < $then) {
    // ...
}

(请注意clone的使用,因为sub修改了它所调用的对象。)