PHP DateTime diff创建带有负小时数的日期间隔
我最近发现了DateTime diff()的一个奇怪行为。 我只是试图计算以下日期之间的差异:PHP DateTime diff创建带有负小时数的日期间隔,php,datetime,dateinterval,Php,Datetime,Dateinterval,我最近发现了DateTime diff()的一个奇怪行为。 我只是试图计算以下日期之间的差异: $first = new DateTime('2016-07-05T00:00:00'); $second = new DateTime('2016-12-30T23:59:59'); $interval = $first->diff($second); echo $interval->h; 奇怪的是,这将输出: -1 这有点令人困惑,因为我认为DateInterval的公共属性是积极
$first = new DateTime('2016-07-05T00:00:00');
$second = new DateTime('2016-12-30T23:59:59');
$interval = $first->diff($second);
echo $interval->h;
奇怪的是,这将输出:
-1
这有点令人困惑,因为我认为DateInterval的公共属性是积极的。
现在,如果我试图自己创建这样一个日期间隔:
$interval = new DateInterval('P5M26DT-1H59M59S');
这将失败,因为小时内不允许出现负值
这种行为正常吗?如果是,我如何安全地将DateInterval转换为string/from string(例如,用于存储在DB中)?您在该时间段内有夏时制转换,不是吗?是的,我认为这就是问题所在!如果第一个日期在夏令时内,则会出现问题。但是,PHP是否应该足够聪明,将日期的数量减少1,并将小时数增加24,这样我们就可以再次得到一个正小时数值?我猜如果天数值不是他们期望的值,会有更多的人抱怨,而不是如果小时数值是-1,那么你在Linux中得到这个结果了吗?谢谢你的回答。是的,我使用了Linux,但我认为这会发生在每个操作系统上。我想我知道为什么-1是必要的。看,你在那个时间段有一个夏令时轮班,不是吗?是的,我想这就是问题所在!如果第一个日期在夏令时内,则会出现问题。但是,PHP是否应该足够聪明,将日期的数量减少1,并将小时数增加24,这样我们就可以再次得到一个正小时数值?我猜如果天数值不是他们期望的值,会有更多的人抱怨,而不是如果小时数值是-1,那么你在Linux中得到这个结果了吗?谢谢你的回答。是的,我使用了Linux,但我认为这会发生在每个操作系统上。我想我知道为什么-1是必要的。看见