gpt4 book ai didi

PHP DateTime 差异返回错误的天数

转载 作者:可可西里 更新时间:2023-11-01 00:54:23 27 4
gpt4 key购买 nike

我有以下代码,它打印出两个日期之间的差异:

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
)

如您所见,第一个日期差异正确返回 10 个月零 0 天。然而,第二个不是返回 1 个月和 0 天,而是错误地返回 1 个月零 1 天。

这是什么原因造成的?

让我感到困惑的是,我试图在几个 PHP 沙箱站点上运行这段代码,但得到的结果不一致:

我自己的服务器和https://wtools.io/php-sandbox返回第二个日期的错误天数。但例如 http://sandbox.onlinephpfunctions.com/在第二个日期差异上正确返回 0 天。

最佳答案

这是因为服务器时区。只需将所有内容设置为 UTC,您应该没问题。

print_r((new DateTime('2018-10-01', new DateTimeZone('UTC')))->diff(new DateTime('2018-11-01', new DateTimeZone('UTC'))));

https://3v4l.org/PWKiD

没有时区,确实是意想不到的值(value)。 https://3v4l.org/6v0XI

关于PHP DateTime 差异返回错误的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53189839/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com