将日期与日期和时间进行比较,得出意外结果

时间:2018-08-26 21:57:48

标签: php datetime

虽然有很多关于如何比较两个日期的帖子,但我找不到相关的日期。

考虑一下:

$x = new \DateTime('2018-08-27');
$y = new \DateTime('2018-08-28');

$interval = $x->diff($y);

$diff = $interval->d; // 1 - fine

这将返回两个日期之间的时差-1天,这是正确的日期。

但是现在,考虑第一个对象中具有日期和时间而第二个对象中没有日期和时间的情况。

$x = new \DateTime('2018-08-27 09:33:45');
$y = new \DateTime('2018-08-28');

$interval = $x->diff($y);

$diff = $interval->d; // 0 - wrong, expecting 1

我可以解决这个问题,但是我想避免肮脏的骇客和变通办法来实现这一目标(例如调整时间)。有什么本机的方法吗?

1 个答案:

答案 0 :(得分:2)

问题在于没有指定时间的new \DateTime默认为午夜,因此两个日期之间只有14:26:15,少于一天。因此$interval->d = 0。您将需要使用setTime来确保两个时间都在午夜,例如

$interval = $x->setTime(0,0,0)->diff($y->setTime(0,0,0));