Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 比较两个日期或比较两个日期减去8小时_Php - Fatal编程技术网

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

Php 比较两个日期或比较两个日期减去8小时,php,Php,好吧,奇怪的一个 写了一个脚本来检查XML提要,如果我的孩子所在的县的学校关闭了。每个条目都有一个生效日期节点,即学校关闭公告生效的日期 我所做的是比较生效日期是否早于当前时间,这意味着在午夜之后,在当前日期结束工作。但是如果他们提前一天晚上放学怎么办 我需要检查生效日期是否大于今天,但从下午4点开始,而不是午夜 date_default_timezone_set('America/New_York'); $date_effective = $announcement->date_effe

好吧,奇怪的一个

写了一个脚本来检查XML提要,如果我的孩子所在的县的学校关闭了。每个条目都有一个生效日期节点,即学校关闭公告生效的日期

我所做的是比较生效日期是否早于当前时间,这意味着在午夜之后,在当前日期结束工作。但是如果他们提前一天晚上放学怎么办

我需要检查生效日期是否大于今天,但从下午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
}
用时间代替那个

<?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
}
与表示时差的符号组合使用:

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

注意clone的用法,因为sub会修改调用它的对象。

所以你想从$now中减去一些小时,并将其与$date进行比较,对吗?@AniketSahrawat是的$日期是常量,我需要知道当前时间是否晚于该日期的午夜,或者该日期的午夜减去前一天下午4点的8小时。那么,当您已经在检查日期是否在前一天下午4点之后时,为什么还要检查当前时间是否晚于该日期的午夜?日期的午夜显然将在前一天下午4点之后。现在,学校明天停课。生效日期为“2018-02-02 00:00:00.000000”。当前时间不超过那个日期,所以我的剧本认为明天学校不会关门。如果我将生效日期与今天下午4点进行比较,那么它会更大,并且会产生正确的情况。日期\默认\时区\集合的工作方式与您认为在strotime上的工作方式不同