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));