Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.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 DateTime_Php_Datetime - Fatal编程技术网

返回负小时值的PHP DateTime

返回负小时值的PHP DateTime,php,datetime,Php,Datetime,我试图解决php DateTime witch在某些特定情况下返回奇怪值的问题 例如,我的代码: $start = new \DateTime("2018-10-04 00:00"); $end = new \DateTime("2018-10-28 23:59"); $diff = $end->diff($start); 返回: DateInterval {#2311 ▼ +"y": 0 +"m": 0 +"d": 25 +"h": -1 +"i": 59 +"

我试图解决php DateTime witch在某些特定情况下返回奇怪值的问题

例如,我的代码:

$start = new \DateTime("2018-10-04 00:00");
$end = new \DateTime("2018-10-28 23:59");
$diff = $end->diff($start);
返回:

DateInterval {#2311 ▼
  +"y": 0
  +"m": 0
  +"d": 25
  +"h": -1
  +"i": 59
  +"s": 59
  +"f": 0.0
  +"weekday": 0
  +"weekday_behavior": 0
  +"first_last_day_of": 0
  +"invert": 1
  +"days": 24
  +"special_type": 0
  +"special_amount": 0
  +"have_weekday_relative": 0
  +"have_special_relative": 0
}
“25天-1小时59分钟”


在大多数情况下,函数工作得很完美。这只是偶尔发生,但仍然是一个问题。。。有没有办法在每次都不重新计算这个奇怪的值的情况下获得正常的天/小时格式?

多亏了Alvaro,我找到了解决方案:

$start = new \DateTime("2018-10-04 00:00", new \DateTimeZone('UTC'));
$end = new \DateTime("2018-10-28 23:59", new \DateTimeZone('UTC'));
$diff = $end->diff($start);

问题可能是我在上述期间的欧洲/华沙时区和CEST/CET时移。

我无法用PHP5.5或更高版本重现这一点:我认为,由于夏令时,跨越时区边界时会发生这种情况。这是一种PHP不能很好地处理的情况。在实践中,我发现将所有内容切换到UTC时,这种计算效果更好。我完全同意阿尔瓦罗贡扎的观点lez@RobbieAverill请尝试在欧盟内使用时区,例如“欧洲/阿姆斯特丹”。谢谢!这可能是一个时区和10月份CEST/CET班次的问题。请注意,如果日期是在当地时间,这不会给出完全正确的结果。在这种情况下,您需要在本地时间创建实例,然后创建到UTC。适用于我的所有数据集,但您可能是对的。如果需要,您可以随时更改时区。