【问题标题】:date function disregards the default timezonedate 函数忽略默认时区
【发布时间】: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 - 你确定你没有在代码中发生其他事情吗?我这里有一个非常相似的系统,我可以执行您的所有尝试并获得正确的响应...您是使用本地开发设置还是托管设置?

标签: php timezone php-ini


【解决方案1】:

查看您的second screenshot,发生这种情况的唯一方法(据我所知)是在运行时调用date_default_timezone_set('UTC');。它会更改“默认时区”,使其与 .ini 文件中的 date.timezone 值不同。

所以寻找类似的东西:

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

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

  • 如果不使用框架,您是否使用任何可能包含 date_default_timezone_set 的 PHP 库。如果是这样,那可能就是麻烦了。


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

【讨论】:

  • 您在 Wordpress 中一针见血。幸运的是,我将 phpinfo() 扔进了给我意外日期输出的代码块中,如果我只是在一个普通文件中完成它,我永远不会抓住它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 2015-04-07
  • 1970-01-01
相关资源
最近更新 更多