我用来得出当前日期和时间的PHP命令比当前时间晚一小时。如何使用PHP输出实际的当前英国时间和日期?
PHP命令
new DateTime();
当前时间比当前时间晚一小时的输出。
[Date the login occurred] => DateTime Object
(
[date] => 2019-04-10 12:54:54.000000
[timezone_type] => 3
[timezone] => UTC
)
答案 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
答案 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"