我一直在为这件事伤透脑筋…
- 服务器位置:旧金山
- 服务器配置:Ubuntu+LEMP
- 应用程序:Wordpress
好的,所以我将Ubuntu的时间设置为当前时间,并将时区更改为HST,也就是我所在的时区,然后重新启动cron。
我将php.ini时区设置为太平洋/檀香山,并将Wordpress设置/时区设置为亚太/檀香山
重新启动nginx和php。。。
然而,当我
<?php echo date('e'); ?>
它显示UTC…
我遗漏了什么吗?帮助
尝试以下操作,
<?php
date_default_timezone_set('America/Los_Angeles');
echo date_default_timezone_get() . ' => ' . date('e') . ' => ' . date('T');
?>
在脚本中设置时区。
date_default_timezone_set('PST');
date('e');
当您最初启动nginx时,您的系统时区设置为什么?
您是真的关闭了nginx
,然后从头开始启动它,还是只是让它重新读取配置文件?(仅供参考:流行的cat /var/run/nginx.pid | xargs kill -HUP
不会导致重启。)
你最好的办法可能是做一些类似sudo sh -c "cat /usr/share/zoneinfo/Pacific/Honolulu > /etc/localtime"
的事情,从单个应用程序中删除任何时区提及,然后正确地关闭和启动整个服务器。
在php.ini
文件中,确保设置:
date.timezone = "America/Los_Angeles"
然后使用将服务器时间更改为适当的时区
sudo dpkg-reconfigure tzdata
迟到总比不迟到好,所以我在这里插话。事实上,无论你的INI设置如何,将默认时区设置回UTC都是WordPress和一个奇怪的决定。这个令人愉快的宝石可以在wp-settings.php中找到(链接是干线版本,标记线将来可能会关闭)。
我想他们这样做是为了让他们的内部时间计算变得简单,并建立在一个共同的基础上。我确实理解这背后的意图,但仍然认为这很尴尬,肯定给用户和开发人员(就像我现在一样)带来了很多困惑和麻烦。他们本可以把它藏在里面的。
不管怎样,底线是:在主题或插件中进行自己的时间计算时,一定要事先明确设置时区。
仅仅使用time()
并认为自己很适合使用可能会导致头痛。您可以通过get_option('timezone_string')
获取设置面板中的设置,例如将其与date_default_timezone_set
结合使用。
Weston Ruter很好地总结了这一切,并建议使用PHP的日期和时间相关类,并明确设置它们的时区。