日期函数忽略默认时区
date function disregards the default timezone
遵循不直接修改 php.ini
而是拥有单独文件的最佳实践,我有以下文件:
$ cat /etc/php/7.0/apache2/conf.d/99-timezone.ini
[Date]
date.timezone="America/Los_Angeles"
我可以看到正在加载 ini 文件,正如这个 phpinfo screenshot. However in the 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"
如何将前两个时间设为当地时间?
看看您的 second screenshot,(据我所知)发生这种情况的唯一方法是在运行时调用 date_default_timezone_set('UTC');
。它改变了 'Default Timezone',导致它与 .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
这样做的,因为我假设您正在检查 phpinfo一个只包含 <?php phpinfo();
的文件——没有框架或库。
遵循不直接修改 php.ini
而是拥有单独文件的最佳实践,我有以下文件:
$ cat /etc/php/7.0/apache2/conf.d/99-timezone.ini
[Date]
date.timezone="America/Los_Angeles"
我可以看到正在加载 ini 文件,正如这个 phpinfo screenshot. However in the 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"
如何将前两个时间设为当地时间?
看看您的 second screenshot,(据我所知)发生这种情况的唯一方法是在运行时调用 date_default_timezone_set('UTC');
。它改变了 'Default Timezone',导致它与 .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
这样做的,因为我假设您正在检查 phpinfo一个只包含 <?php phpinfo();
的文件——没有框架或库。