我想计算两个日期之间有多少个月:
$from = new DateTime('2014-11-01 00:00:00');
$to = new DateTime('2014-12-01 00:00:00');
$diff = $from->diff($to);
echo $diff->m; // <-- 0
2014-11-01 00:00:00
和2014-12-01 00:00:00
之间的差异应该恰好是一个月,对吗?但是$diff->m
说 0 。 diff->d
代表30天。
如果我对2014-01-01 00:00:00
和2014-02-01 00:00:00
进行同样的操作,$diff->m
现在说 1 ,这是正确的。
我错过了什么吗?
修改
因为我只需要计算两个设定日期之间有多少个月,并且用户将从和插入日期与月份和年份(2014年12月) ),为我工作的最佳解决方案是将增加到日期:
// user inserts
// from: 11/2014
// to: 12/2014
$from = new DateTime('2014-11-01');
$to = new DateTime('2014-12-15');
$diff = $from->diff($to);
echo $diff->m // outputs 1
感谢STLMikey给我答案! ;)
答案 0 :(得分:0)
DateInterval工作有点......奇怪的是在很多场景中。
尝试$diff->format('%m month, %d days');
,看看是否有助于澄清一些事情。 %m
和%d
通常会返回0
,如果差异更好地由不同的衡量标准涵盖。
例如:
$from = new \DateTime('2014-01-01 00:00:00');
$to = new \DateTime('2014-02-15 00:00:00');
$ diff-&gt; m这两个日期也会返回“1”。
我个人倾向于使用$interval->format('%a total days');
因为它不会混淆自己(或我)试图过于聪明。
答案 1 :(得分:-1)
在我的计算机上,代码会产生不同的结果。我的php版本是5.3.13。
<?php
$from = new DateTime('2014-11-01 00:00:00');
$to = new DateTime('2014-12-01 00:00:00');
$diff = $from->diff($to);
echo $diff->m; // outputs 1
echo $diff->d; // outputs 0
?>
编辑1:另一个输出
<?php
$from = new DateTime('2014-01-01 00:00:00');
$to = new DateTime('2014-02-01 00:00:00');
$diff = $from->diff($to);
echo $diff->m; // outputs 1
echo $diff->d; // outputs 0
?>