php 时区:DateTime::createFromFormat 忽略时区

Seb*_*ian 2 php datetime

我在 debian 8 上使用 php 5.6.17。设置 owncloud 后,我注意到由 owncloud(不是 apache)自己编写的日志有错误的时区。

我对此进行了一些调查,似乎该行:

DateTime::createFromFormat("U.u", number_format(microtime(true), 4, ".", ""), 'Europe/Berlin');
Run Code Online (Sandbox Code Playgroud)

这不关心任何时区设置。而不是欧洲/柏林 (+1/+2) 的时间,我总是得到 UTC 的时间。

/etc/php5/apache2/php.ini我设置"date.timezone = "Europe/Berlin"和系统时间(debian)也是正确的。

即使我运行类似下面的东西,我也会得到相同的输出(UTC):

 $time=DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true)), new DateTimeZone('UTC'));
 echo $time->format('c') . "\n";
 $time=DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true)), new DateTimeZone('Europe/Berlin'));
 echo $time->format('c') . "\n";
Run Code Online (Sandbox Code Playgroud)

关于这个问题的任何想法?

Nar*_*arf 7

在 DateTime::createFromFormat() 上引用PHP 手册

注意: 当 time 参数包含 UNIX 时间戳(例如 946684800)或指定时区(例如 2010-01-28T15:00:00+02:00)时,将忽略 timezone 参数和当前时区。

如果要更改时区,则必须在创建对象后使用setTimezone()方法。

  • 从时间戳创建 DateTime 对象 = php 中的另一个 wtf 时刻。 (3认同)