DateTime :: diff奇怪的结果 [英] DateTime::diff weired result

查看:106
本文介绍了DateTime :: diff奇怪的结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 DateTime :: diff 比较两个 DateTime ,但是结果很奇怪,好像 abs($ date1-$ date2)!= abs($ date2-$ date1)

I use DateTime::diff to compare two DateTime, but the result is very weird as if abs($date1 - $date2) != abs($date2 - $date1).

$date1 = new DateTime("1980-11-21 00:00:00");
$date2 = new DateTime("1981-11-20 00:00:00");
var_dump($date1->diff($date2,true)->days);
var_dump($date2->diff($date1,true)->days);
var_dump($date1->diff($date2,true)->format("%Y-%m-%d %H:%i:%s"));
var_dump($date2->diff($date1,true)->format("%Y-%m-%d %H:%i:%s"));

哪个返回:

int(364)
int(364)
string(15) "00-11-30 00:0:0"
string(15) "00-11-29 00:0:0"

演示

推荐答案

行为正确。两个日期间隔代表相同的天数(364)。月和日期部分代表需要添加到第一个日期或从第一个日期减去到第二个日期的时间段:

The behavior is correct. Both date intervals represent same number of days (364). The month and date part represent the period that needs to be added to/subtracted from first date to reach second date:

1981-11-20 minus 1980-11-21 represents an interval of 11 month 30 day
1980-11-21 + 11 month = 1981-10-21
1981-10-21 + 30 day   = 1981-10-21

1980-11-21 minus 1981-11-20 represents an interval of 11 month 29 day
1981-11-20 - 11 month = 1980-12-20
1980-12-20 - 29 day   = 1980-11-21

一个更简单的示例是10月21日... 12月20日:

A simpler example would be Oct 21 ... Dec 20:


  • 您需要在1月21日之前添加1个月29天才能达到12月20日(请注意,12月之前的一个月有30天)

  • 但是...您需要从12月20日减去1个月30天才能达到10月21日。10月本身有31天,这说明差异。

这篇关于DateTime :: diff奇怪的结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆