如何在移动服务器上处理PHP时区


How to handle PHP timezone on moving server?

我收到了常见的PHP警告,因为我使用strtotime而没有设置默认时区:

PHP警告:date_default_timezone_get():依赖系统的时区设置是不安全的。需要使用date.timezone设置或date_default_timezone_set()函数。如果您使用了其中任何一种方法,但仍然收到此警告,则很可能是您拼错了时区标识符。我们选择了"美国/芝加哥"作为"CST/6.0/无夏令时",而不是

我读了很多关于需要做什么的文章,基本上似乎没有办法设置默认时区(要么在php.ini中使用date.timezone="America/Chicago",要么在php中使用date_default_timezone_set('CST6CDT')或类似的方法)。

我的问题是,我们有一个移动的服务器,它经常在不同的时区进行演示,所以我不能只设置一个固定的时区,让我们走到哪里都能工作。。。

或者我可以吗?当然,我也有可能完全误解了整个时区的概念;-)坦率地说,我读得越多,就越困惑。。。我也不确定将服务器的系统时间插入不同时区的网络会对其产生什么影响——我还不知道或不理解的太多了(对不起…)。

我想停止这些错误消息的主要原因是,我必须大量筛选错误日志,因为这也是我的开发服务器,必须过滤掉所有这些行是一个很大的痛苦。。。

最重要的是,服务器上的应用程序不仅使用本地时间,而且还与我们的静态服务器同步一些数据,所以我痛苦地意识到,我还必须调整许多主服务器代码,为此,我可以很容易地强制使用我们的实际时区或UTC。

那么,这里的最佳选择是什么呢?

我应该简单地将UTC硬编码为默认时区,然后在我的数据库和用户界面中创建一个设置,我们可以使用它来切换时区并更新我的所有代码以使用所有这些,还是有更好、更简单的方法?

还是应该忽略整个问题,在我使用的每个strtotime中添加@?(为一场小暴乱做好准备…);-)

期待任何建议。。。谢谢

Andy Jones是正确的。您最好的选择是将服务器完全基线化。我的意思是将所有编码(bash、mysql)设置为UTF-8,将时区设置为UTC。如果你从一开始就这样做,你会省去很多头疼的事情。

关于您提出的问题,如果您将数据库中的所有时间戳存储为UTC,那么您只需要根据最终用户的时区进行转换。这避免了必须确定数据库中存储的时区是PST还是EST,然后转换为用户的时区。此外,它还允许您在时区之间移动服务器。例如,如果您在多个时区使用VPS,每个时区都输入到同一个数据库中,则可以确保所有时区条目都是一致的。