DateInterval返回0个月?

时间:2015-01-26 17:33:36

标签: php datetime datediff

我想计算两个日期之间有多少个月:

$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:002014-12-01 00:00:00之间的差异应该恰好是一个月,对吗?但是$diff->m 0 diff->d代表30天。

如果我对2014-01-01 00:00:002014-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给我答案! ;)

2 个答案:

答案 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

?>