PHP同步时区夏令时问题

时间:2011-08-31 00:49:50

标签: php mysql timezone synchronize

我有一个网站将数据加载到MySQL表中。表中的两个条目是'startdate'和'enddate'。使用CURRENT_TIMESTAMP自动'startdate'。 'enddate'由用户使用日期选择器选择。

如果用户与服务器位于不同的时区,则会产生问题。例如(我在太平洋时区,服务器位于Central)。如果我在下午5点创建一个条目并选择结束日期为晚上10点,它会在晚上7点到晚上10点进入数据库,创建一个3小时的窗口,而不是5.我想要的是将结束日期转换为中心时间(相同)作为服务器)。所以,使用我的例子,我希望数据库中的条目是晚上7点和午夜12点。

我可以使用此javascript获取用户时区偏移量:

var d = new Date();
var timezone = -d.getTimezoneOffset()/60;

这返回-7(我在GMT-8中,我假设1小时的差异是因为夏令时)。我首先想到的解决方案是假设服务器在-5中,并比较两者(回到我的例子,-5 - -7 = 2,所以在'enddate'中添加2)。

当我们切换回标准时间时出现问题。我假设我的javascript将开始返回-8而不是-7,从而破坏了我的功能。我知道PHP的date_default_timezone_get(),但它返回一个字符串而不是一个数字。我想我需要的是一个类似的功能(中央时间)在夏令时返回-5,在标准时间内返回-6。

2 个答案:

答案 0 :(得分:2)

使用mysql时间戳字段。

或者以UTC格式保存所有数据,然后在php中执行需要完成的操作。

答案 1 :(得分:0)

使用MySQL的UTC_TIMESTAMP而不是CURRENT_TIMESTAMP,将'startdate'转换为UTC时间。我的javascript代码:

var d = new Date();
var timezone = -d.getTimezoneOffset()/60;

可用于将'enddate'转换为UTC时间。现在一切都是UTC,它匹配。