使用DateTime类计算日期差异时出错

时间:2011-03-08 16:47:50

标签: php datetime intervals

我正在尝试使用DateTime(php> = 5.3)类来计算2日期之间的差异。

手册中的示例简单明了,我尝试了这个例子并且运行良好。 但如果更改开始日期和结束日期,则会出现问题:

        $this->start_date = '2011-03-01';
        $this->end_date = '2011-03-31';

        var_dump($this->start_date, $this->end_date);

        $datetime1 = new DateTime($this->start_date);
        $datetime2 = new DateTime($this->end_date);

        $interval = $datetime2->diff($datetime1);

        echo $interval->format('%a total days')."\n";
        echo $interval->format('%m month, %d days');

输出是:

30 total days     //ok
1 month, 2 days   //no! i think it should be 0 month, 30 days

随着游行不能很好地工作! :)

1 个答案:

答案 0 :(得分:1)

二月份不是28天吗?由于某种原因,它可能会选择2月份的“月份”单位。该方法的PHP文档似乎表明这种事情很容易就是这种情况。说“x个月”并不过分有用,因为一个月不是固定单位,可能是28天,29天,30天或31天。

摘自下面的PHP dateinterval format documentation

  

DateInterval :: format()方法可以   没有重新计算结转点数   时间字符串也不是日期段。   这是预期的,因为它不是   可能溢出像“32   天“可以解释为   从“1个月到4天”到   “1个月和1天”。