2017-04-26 170 views
0

我有我的Apache服务器和PHP设置为date_default_timezone_set(“America/Los_Angeles”)。时间戳/时区/ PHP/MySQL

在MySQL中,我使用CURRENT_TIMESTAMP和其中一些EXTRA作为“on update CURRENT_TIMESTAMP”保存TIMESTAMP字段。

我是以正确的方式做这个还是我失去了TIMESTAMPS的全部观点?我希望用户能够选择自己的时区,但它似乎将本地时区保存到MySQL,而不是通用参考点。

我是否应该将服务器时区设置为UTC,并在PHP date_default_timezone_set(“America/Los_Angeles”)中或用户时区是什么,然后将值保存到MySQL字段中,而不是CURRENT_TIMESTAMP(这似乎取决于在PHP的设置)?

谢谢!

+2

[PHP,MySQL和时区](http://stackoverflow.com/questions/5768380/php-mysql-and-time-zones)和[夏令时和时区最佳实践](http ://stackoverflow.com/questions/2532729/daylight-saving-time-and-time-zone-best-practices?rq = 1) –

回答

1

理想情况下,您希望数据库以UTC的形式存储数据,这样它就不会固定在任何特定地理位置。来自用户的传入数据根据用户的时区进行转换,您显示的任何内容也可以转换回用户的首选时区。

有些系统甚至会将UTC时间发送到HTML中的客户端,但使用JavaScript挂钩并在客户端重新呈现具有适当本地时间的内容来标记该元素。

最好是在用户记录和/或会话中保留一个用户指定的设置,该设置定义应对他们指定或显示的日期和时间执行哪些转换(如果有)。

还值得注意的是TIMESTAMP字段仅限于2038年,所以他们已经靠借用时间生活了。最好使用更具标准的DATETIME字段,它具有更宽的可接受值范围。

+0

@tadman谢谢!是否将它保留在我的时区中,并让它成为主控器而不是UTC?我喜欢能够直接在数据库中查看,并且时刻都在我的位置。但如果这样做有任何缺点,我会跳过这种方便。 – SeaBass

+1

你想投资的技能之一是能够阅读UTC时间并理解它们。没有比将数据库从加利福尼亚州的服务器移动到新泽西州的服务器更麻烦的事了,突然之间,由于时区转移,您的所有时间都被彻底摧毁了。保持中立,你不会有这样的问题。飞行员使用“祖鲁时间”(UTC)作为原则问题,他们总是改变时区,你也可以。 – tadman