PHP 日期时间差异返回错误的天数
PHP DateTime difference is returning wrong number of days
我有以下代码,打印出两个日期之间的差异:
print_r((new DateTime('2018-01-01'))->diff(new DateTime('2018-11-01')));
print_r((new DateTime('2018-10-01'))->diff(new DateTime('2018-11-01')));
输出:
DateInterval Object
(
[y] => 0
[m] => 10
[d] => 0
[h] => 0
[i] => 0
[s] => 0
[f] => 0
[weekday] => 0
[weekday_behavior] => 0
[first_last_day_of] => 0
[invert] => 0
[days] => 304
[special_type] => 0
[special_amount] => 0
[have_weekday_relative] => 0
[have_special_relative] => 0
)
DateInterval Object
(
[y] => 0
[m] => 1
[d] => 1
[h] => 0
[i] => 0
[s] => 0
[f] => 0
[weekday] => 0
[weekday_behavior] => 0
[first_last_day_of] => 0
[invert] => 0
[days] => 31
[special_type] => 0
[special_amount] => 0
[have_weekday_relative] => 0
[have_special_relative] => 0
)
如您所见,第一个日期差异 returns 正确地为 10 个月零 0 天。
然而,第二个不是返回 1 个月零天,而是 returns 错误地返回 1 个月零 1 天。
这是什么原因造成的?
令我困惑的是,我试图在几个 PHP 沙盒站点上 运行 这段代码,但我得到的结果不一致:
我自己的服务器和 https://wtools.io/php-sandbox returns 第二次约会的天数错误。
但是例如 http://sandbox.onlinephpfunctions.com/ returns 正确地在第二个日期差异上有 0 天。
这是因为服务器时区。只需将所有内容设置为 UTC,你应该没问题。
print_r((new DateTime('2018-10-01', new DateTimeZone('UTC')))->diff(new DateTime('2018-11-01', new DateTimeZone('UTC'))));
没有时区,确实是出乎意料的值。 https://3v4l.org/6v0XI
我有以下代码,打印出两个日期之间的差异:
print_r((new DateTime('2018-01-01'))->diff(new DateTime('2018-11-01')));
print_r((new DateTime('2018-10-01'))->diff(new DateTime('2018-11-01')));
输出:
DateInterval Object
(
[y] => 0
[m] => 10
[d] => 0
[h] => 0
[i] => 0
[s] => 0
[f] => 0
[weekday] => 0
[weekday_behavior] => 0
[first_last_day_of] => 0
[invert] => 0
[days] => 304
[special_type] => 0
[special_amount] => 0
[have_weekday_relative] => 0
[have_special_relative] => 0
)
DateInterval Object
(
[y] => 0
[m] => 1
[d] => 1
[h] => 0
[i] => 0
[s] => 0
[f] => 0
[weekday] => 0
[weekday_behavior] => 0
[first_last_day_of] => 0
[invert] => 0
[days] => 31
[special_type] => 0
[special_amount] => 0
[have_weekday_relative] => 0
[have_special_relative] => 0
)
如您所见,第一个日期差异 returns 正确地为 10 个月零 0 天。 然而,第二个不是返回 1 个月零天,而是 returns 错误地返回 1 个月零 1 天。
这是什么原因造成的?
令我困惑的是,我试图在几个 PHP 沙盒站点上 运行 这段代码,但我得到的结果不一致:
我自己的服务器和 https://wtools.io/php-sandbox returns 第二次约会的天数错误。 但是例如 http://sandbox.onlinephpfunctions.com/ returns 正确地在第二个日期差异上有 0 天。
这是因为服务器时区。只需将所有内容设置为 UTC,你应该没问题。
print_r((new DateTime('2018-10-01', new DateTimeZone('UTC')))->diff(new DateTime('2018-11-01', new DateTimeZone('UTC'))));
没有时区,确实是出乎意料的值。 https://3v4l.org/6v0XI