Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP DateTime差返回的天数错误_Php_Php 7.2 - Fatal编程技术网

PHP DateTime差返回的天数错误

PHP DateTime差返回的天数错误,php,php-7.2,Php,Php 7.2,我有以下代码,它打印出两个日期之间的差异: 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

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

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沙箱站点上运行此代码,但结果不一致:

我自己的服务器,并返回第二个日期的错误天数。
但是,例如,在第二个日期差返回正确的0天。

这是因为服务器时区。只要将所有设置为UTC,您就会没事了

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


如果没有时区,它确实是意外的值

Islam不,它在这里不起作用,但在这里起作用@delboy1978uk我删除了我的评论,因为我确实注意到了这个问题:)一个可能在不同服务器之间持续不同的事情是它们的时区,这可能会影响功能,如
DateTime('now')
,这可能会影响总体测量。我认为这是因为夏时制。。。时钟可以追溯到10月,这意味着10月1日的午夜比11月1日的午夜早一个小时,而且由于这些
DateTime
对象中没有指定时间。。。这就是为什么
UTC
修复程序可以工作的原因。将时间设置为正午(
2018-11-01 12:00:00
)也可以解决此问题。