0

我一直收到使用 strtotime 而不设置默认时区的常见 PHP 警告:

PHP 警告:date_default_timezone_get():依赖系统的时区设置是不安全的。您需要使用 date.timezone 设置或 date_default_timezone_set() 函数。如果您使用了这些方法中的任何一种,但仍然收到此警告,您很可能拼错了时区标识符。我们为 'CST/-6.0/no DST' 选择了 'America/Chicago'

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

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

或者我可以吗?当然,我也有可能完全误解了整个时区的概念;-) 坦率地说,我读的越多,我就越困惑……我也不确定服务器的系统时间是如何受到影响的将其插入不同时区的网络 - 我不知道或不了解的内容太多(对不起......)。

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

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

那么这里最好的选择是什么?

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

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

期待任何建议...谢谢!

4

1 回答 1

1

安迪琼斯是正确的。您最好的选择是完全为您的服务器设置基线。我的意思是将所有编码(bash、mysql)设置为 UTF-8,将时区设置为 UTC。如果你从一开始就这样做,你会在以后省去很多麻烦。

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

于 2013-02-21T22:31:01.473 回答