date函数忽略默认时区



根据最佳实践,不直接修改php.ini,而是使用单独的文件,我有以下文件:

$ cat /etc/php/7.0/apache2/conf.d/99-timezone.ini
[Date]
date.timezone="America/Los_Angeles"

我可以看到ini文件正在被加载,这张phpinfo屏幕截图证明了这一点。然而,在日期部分,两个指令中只有一个更新为显示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"

如何将前两个时间拨到当地时间?

查看第二个屏幕截图,实现这一点的唯一方法(据我所知)是在运行时调用date_default_timezone_set('UTC');。它会更改"默认时区",使其与.ini文件中的date.timezone值不同。

因此,请查找以下内容:

  • .ini文件中的auto_prepend_file=。此指令会使脚本在处理的每个PHP文件之前自动预处理。如果它正在使用中,并且它加载的PHP文件设置了时区,则可能会导致这种情况。

  • 你在使用PHP框架吗?如果是,请在框架的PHP文件中搜索date_default_timezone_set。例如,WordPress强制时区为UTC。

  • 如果不使用框架,您是否使用任何可能包含date_default_timezone_set的PHP库。如果是这样的话,那可能就是问题所在。


它在phpinfo()输出中显示为这样的事实表明它是一个auto_prepend_file在做这件事,因为我假设你用一个只包含<?php phpinfo();的文件检查phpinfo——没有框架或库

相关内容

  • 没有找到相关文章

最新更新