【问题标题】:DateInterval returning 0 months?DateInterval 返回 0 个月?
【发布时间】:2015-03-25 04:22:10
【问题描述】:

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

$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-&gt;m0diff-&gt;d 改为 30 天。

如果我对 2014-01-01 00:00:002014-02-01 00:00:00 尝试相同的操作,$diff-&gt;m 现在表示 1 个月,这是正确的。

我错过了什么吗?


编辑:

因为我只需要计算两个设置日期之间有多少个月,并且用户插入带有月份和年份的 fromto 日期(12/2014 ),对我来说最好的解决方案就是增加 to 日期:

// 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 为我提供答案! ;)

【问题讨论】:

    标签: php datetime datediff


    【解决方案1】:

    DateInterval 有点……在许多情况下很奇怪。

    试试$diff-&gt;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->根据文档,这两个日期中的 m 也将返回“1”。

    我个人倾向于只使用$interval-&gt;format('%a total days');,因为它不会混淆自己(或我)试图变得太聪明。

    【讨论】:

    • $diff-&gt;format('%m month, %d days'); 在第一个示例中返回 "0 月 30 天"。其实相差30天,但应该显示为1个月0天吧?
    • $from = new \DateTime('2014-01-01 00:00:00'); $to = new \DateTime('2014-02-15 00:00:00');在这种情况下,月份的差异也是“1”……月份不计算为 30 天。 %d 只是为您提供月份值的差异
    【解决方案2】:

    在我的计算机上,代码会产生不同的结果。我的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
    
    ?>
    

    【讨论】:

    • 仅供参考:如果您愿意,您可以阅读此内容:meta.stackexchange.com/a/214174 并从那里获得简短引用:Can I put my comment in an answer? No.
    • 对不起,如果我可以帮助解决问题的人,不这样做不是不公平吗?我应该删除这个吗?
    • 不,我会以不同的方式开始你的回答。
    • @IanThompson 感谢您的贡献 - 它真的对我有帮助,因为我可以看到这看起来像 php 中的一个错误。我运行 PHP 5.4.6 的服务器将 $diff-&gt;m; 回显为 0。
    猜你喜欢
    • 2013-07-27
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    相关资源
    最近更新 更多