date函数忽略默认时区

时间:2017-11-08 02:38:58

标签: php timezone php-ini

按照最佳做法不直接修改php.ini但有单独的文件,我有以下文件:

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

我可以看到正在加载ini文件,如phpinfo screenshot所示。但是,在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"

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

1 个答案:

答案 0 :(得分:1)

查看你的second screenshot,发生这种情况的唯一方法(我知道)是在运行时调用了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这样做,因为我假设您正在检查phpinfo只有一个文件包含<?php phpinfo(); - 没有框架或库。