我的服务器在达拉斯。我在纽约市.. PHP和MySQL都有配置变量来设置时区。
如何让他们一起工作?我应该在MySQL中存储哪些日期?如何根据用户的偏好让PHP处理更改日期?
请记住:我认为我没有让PHP明确设置日期,它总是在查询中使用“NOW()”但是我预见到需要这样做。怎么会这样做?
我希望这些经验可以帮助我。
答案 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