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

时间:2009-01-10 08:12:06

标签: php mysql date time timezone

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

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

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

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

4 个答案:

答案 0 :(得分:16)

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

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

UNIX_TIMESTAMP(date)
FROM_UNIXTIME(unix_timestamp)

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

检查date_default_timezone_set()功能的Date docs

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

答案 3 :(得分:0)

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时区支持可能需要额外配置。检查manual