为什么PHP命令“ new DateTime();”比现在时间晚一小时?

时间:2019-04-10 13:01:48

标签: php

我用来得出当前日期和时间的PHP命令比当前时间晚一小时。如何使用PHP输出实际的当前英国时间和日期?

PHP命令

new DateTime(); 

当前时间比当前时间晚一小时的输出。

[Date the login occurred] => DateTime Object
        (
            [date] => 2019-04-10 12:54:54.000000
            [timezone_type] => 3
            [timezone] => UTC
        )

4 个答案:

答案 0 :(得分:7)

您需要设置默认时区以获取“正确”值。您获得的时间是正确的,但使用的是UTC时间,而不是夏令时,因为英国目前正在使用该时间:

date_default_timezone_set('UTC');
echo (new DateTime())->format('Y-m-d H:i:s') . PHP_EOL;
date_default_timezone_set('Europe/London');
echo (new DateTime())->format('Y-m-d H:i:s');

输出:

2019-04-10 13:03:33 
2019-04-10 14:03:33

Demo on 3v4l.org

答案 1 :(得分:4)

这是因为您没有通过时区,所以它采用服务器的默认时区。您的情况下,UTC是默认设置。即使英国的格林尼治标准时间0偏移,它也会使用夏令时,而UTC则不使用。

您追求的是:

$dt = new DateTime("now", new DateTimeZone('Europe/London'));

答案 2 :(得分:1)

以上答案是正确的。但是,如果要在整个应用程序中应用设置(即,如果您在多个.php文件中使用DateTime),则可能需要编辑php.ini文件并搜索{{1} },然后将其修改为使用伦敦时区。

date.timezone

答案 3 :(得分:0)

我建议在php.ini文件中设置时区。

通常php.ini位于您/etc/php/{your_php_version}/php.ini

应该有一个看起来像这样的条目:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;date.timezone =

您可以将时区设置为:

date.timezone = "US/Central"

https://www.php.net/manual/en/timezones.europe.php