繁体   English   中英

管理PHP,MySQL等日期的最佳方法是什么?

[英]What's the best way to manage dates across PHP, MySQL, etc?

我的服务器在达拉斯。 我在纽约市.. PHP和MySQL都有配置变量来设置时区。

我如何让他们一起工作? 我应该在MySQL中存储哪些日期? 如何根据用户的偏好让PHP处理更改日期?

请记住:我认为我没有让PHP明确设置日期,它总是在查询中使用“NOW()”但是我预见到需要这样做。 怎么做?

我希望通过这些经验可以帮助我。

到处使用Unix时间。 它使用UTC,因此每个时区都是一样的。 日期的方法通常使用他们拥有的时区信息转换为它并从中返回,因此您可以拥有正确的时间。

或者,您只能使用Unix时间将时间从一台计算机传输到另一台计算机(例如从数据库到运行PHP的服务器或JavaScript客户端)。 有各种语言可以转换为它和它的功能。 对于MySQL,它是:

UNIX_TIMESTAMP(date)
FROM_UNIXTIME(unix_timestamp)

这样你就可以在数据库和日志中正确地格式化你的时间,但到处都有正确的本地时间。

我更喜欢在本机形式中使用与环境相关的日期和时间,即PHP中的Unix时间戳和MySQL中的DATE / TIME / DATETIME / TIMESTAMP字段。 我使用FROM_UNIXTIME()UNIX_TIMESTAMP()将两个值转换为另一个值。 我更喜欢这个而不是Unix时间戳,因为原生日期/时间更容易阅读。

以GMT(零偏移)记录您的日期,然后根据当地时区计算偏移量(例如,EST为+6,因此您需要为GMT增加6小时)。

检查date_default_timezone_set()函数的Date文档

请记住,在写入数据库时​​,您必须更改时区,存储日期,然后再更改。 同样,当您检索日期时,不要忘记添加时区偏移量。

mysql-server以独立于时区的格式(UTC)存储日期。
但在它存储日期之前,它将使用其时区进行转换。

你可以改变每个连接的mysql时区* 1:

mysql_query('SET time_zone = "'.$timezone.'"');

您还可以更改每个脚本的时区。

date_default_timezone_set($timezone);

如果你将它们设置为相同的时区“2009-01-10 13:30:00”对mysql和php都意味着同样的事情。

但请记住,2台服务器具有不同的内部时钟值,因此如果要根据当前时间生成时间戳。 在mysql或php中做到这一点。

* 1)MySQL时区支持可能需要额外配置。 检查手册

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM