Error to calculate date diff with DateTime class

2019-07-23 10:53发布

i'm trying to use the class DateTime (php>=5.3) to calculate difference from 2 date.

The example from the manual is simple and clear, i tried that example and work good. But if a change the start and end date, there a problem:

        $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');

Output is:

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

With march don't work very well! :)

1条回答
仙女界的扛把子
2楼-- · 2019-07-23 11:33

Aren't there 28 days in February? It might be picking February for the "month" unit for some reason or other. The PHP documentation for the method seems to suggest this kind of thing could easily be the case. Saying "x Months" isn't overly useful anyway as a month isn't a fixed unit, it could be 28, 29, 30 or 31 days.

Extract from the PHP dateinterval format documentation below.

The DateInterval::format() method does not recalculate carry over points in time strings nor in date segments. This is expected because it is not possible to overflow values like "32 days" which could be interpreted as anything from "1 month and 4 days" to "1 month and 1 day".

查看更多
登录 后发表回答