【问题标题】:Strange PHP 5.3 issue with date diff calculating difference in days日期差异计算天数差异的奇怪 PHP 5.3 问题
【发布时间】:2012-02-20 12:34:05
【问题描述】:

我在使用 PHP 5.3 的日期差异函数来计算两个日期之间的天数差异时遇到了一个相当奇怪的问题。以下是我的代码:

$currentDate = new DateTime(); // (today's date is 2012-1-27)
$startDate = new DateTime('2012-04-01');

$diff = $startDate->diff($currentDate);

$daysBefore = $diff->d;

echo $daysBefore; 

上面的代码显示 4 作为 $daysBefore 变量的值。

为什么 PHP 显示 2012 年 1 月 27 日和 2012 年 4 月 1 日之间有 4 天的差异,而这两个日期之间显然还有很多天。

我做错了吗?

【问题讨论】:

    标签: php datetime php-5.3


    【解决方案1】:

    DateInterval::$d 是间隔的天数部分,不是差异的总天数。为此,你想要DateInterval::$days,所以:

    $daysBefore = $diff->days;
    

    【讨论】:

      【解决方案2】:

      当通过DateTime::diff 方法创建DateInterval 时,它不仅会在单个字符 属性中填充天,还会填充小时、分钟、秒、月甚至年。您正在检查单字符 d 的天数,这将是计算年份和月份后剩余的天数。

      尝试查看days 属性,该属性只有在您使用diff 时才会实际填充。

      这里的行为非常不一致。查看 DateInterval::format 手册页,了解有关通过各种方式创建 DateInterval 时会发生什么的有趣信息。

      【讨论】:

        【解决方案3】:

        d 属性是天数,如“3 个月,4 天”。如果您想要 total 天数,请使用 days 属性。

        【讨论】:

          【解决方案4】:

          4天,几个月...

          使用$diff->days 表示总天数。

          http://www.php.net/manual/en/class.dateinterval.php

          【讨论】:

            猜你喜欢
            • 2018-05-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-09-21
            • 2010-12-09
            • 1970-01-01
            • 2015-12-30
            • 2012-10-23
            相关资源
            最近更新 更多