【发布时间】:2018-04-20 14:36:13
【问题描述】:
遵循最佳实践,不直接修改php.ini,而是拥有单独的文件,我有以下文件:
$ cat /etc/php/7.0/apache2/conf.d/99-timezone.ini
[Date]
date.timezone="America/Los_Angeles"
我可以看到这个phpinfo screenshot 证明正在加载ini 文件。然而,在date section 中,只有两个指令之一更新为显示America/Los_Angeles,一个是UTC。我什至不知道UTC来自哪里,因为系统时间不是UTC:
$ timedatectl
Local time: Tue 2017-11-07 18:36:56 PST
Universal time: Wed 2017-11-08 02:36:56 UTC
Timezone: America/Los_Angeles (PST, -0800)
(snip)
当我运行这些输出时,我会看到以下输出:
var_dump(ini_get('date.timezone')); //string(19) "America/Los_Angeles"
var_dump(date_default_timezone_get()); //string(3) "UTC"
var_dump(date('e')); //string(3) "UTC"
如何将前两个时间设为当地时间?
【问题讨论】:
-
如果你有一个“获取”某些东西的函数,那么你通常有一个可以“设置”它的函数。 Sooo 你去寻找 date_default_timezone_get() 并找到它的朋友 - date_default_timezone_set('America/Los_Angeles')。
-
@TimBrownlaw 谢谢上尉明显。如果您阅读了man page for
date_default_timezone_set,那么您会注意到如果没有使用date_default_timezone_set设置它,它将退回到来自php.ini 的值。在这种情况下,它会以某种方式跳过它并返回 UTC。 -
可能是一个愚蠢的问题,但您在进行任何更改后是否重新启动了 Apache?另外,您的
var_dump调用是否在您通过HTTP 加载的.php文件中,例如http://localhost/test.php? -
@TimBrownlaw 我在
/etc/php/7.0/apache2/php.ini中取消了date.timezone的注释,将其设置为America/Los_Angeles,重新启动 Apache,然后在转储中看到同样的情况。 -
@sunkerton - 你确定你没有在代码中发生其他事情吗?我这里有一个非常相似的系统,我可以执行您的所有尝试并获得正确的响应...您是使用本地开发设置还是托管设置?