0

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

如果用户位于与服务器不同的时区,这会产生问题。例如(我在太平洋时区,服务器在中部)。如果我在下午 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,因此将 2 添加到“结束日期”)。

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

4

2 回答 2

2

使用 mysql 时间戳字段。

或者将所有数据保存为UTC,然后在php中做需要做的事情。

于 2011-08-31T01:01:16.183 回答
0

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

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

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

于 2011-08-31T19:00:54.337 回答