我有一个网站,将数据加载到MySQL表中。表中的两个条目是'startdate‘和'enddate’。“‘startdate”是使用CURRENT_TIMESTAMP自动生成的。“‘enddate”由用户使用日期选择器选择。
如果用户所在的时区与服务器所在的时区不同,则会产生问题。例如(我在太平洋时区,服务器在中部)。如果我在下午5点创建了一个条目,并选择10 7pm作为结束日期,那么它将作为7 7pm和10 7pm进入数据库,从而创建一个3小时的窗口,而不是5小时。我想要的是将结束日期转换为Central time (与服务器相同)。因此,使用我的示例,我希望数据库中的条目是晚上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。
发布于 2011-08-31 09:01:16
使用mysql时间戳字段。
或者将所有数据保存在UTC中,然后在php中执行需要执行的操作。
发布于 2011-09-01 03:00:54
使用MySQL的UTC_TIMESTAMP而不是CURRENT_TIMESTAMP,将“startdate”转换为UTC时间。我的javascript代码:
var d = new Date();
var timezone = -d.getTimezoneOffset()/60;可用于将“enddate”转换为UTC时间。现在一切都在UTC中,并且它匹配。
https://stackoverflow.com/questions/7251452
复制相似问题