Php 将日期与日期和时间进行比较,会产生意外的结果

Php 将日期与日期和时间进行比较,会产生意外的结果,php,datetime,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 \Dat

虽然有很多关于如何比较两次约会的帖子,但我找不到相关的

考虑这一点:

$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

我可以解决这个问题,但我想避免肮脏的黑客和解决方法来实现这一点(如修剪时间)。有没有什么本地方法可以做到这一点?

问题是没有指定时间的
new\DateTime
默认为午夜,因此两次约会之间只有
14:26:15
,这不到一天。因此
$interval->d=0
。您需要使用以确保这两个时间都在午夜,例如

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

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

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