首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP同步时区夏令时问题

问PHP同步时区夏令时问题
EN

Stack Overflow用户
提问于 2011-08-31 08:49:50
回答 2查看 511关注 0票数 0

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

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

我可以使用下面的javascript获取用户的时区偏移:

代码语言: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。

EN

回答 2

Stack Overflow用户

发布于 2011-08-31 09:01:16

使用mysql时间戳字段。

或者将所有数据保存在UTC中,然后在php中执行需要执行的操作。

票数 2
EN

Stack Overflow用户

发布于 2011-09-01 03:00:54

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

代码语言:javascript
复制
var d = new Date();
var timezone = -d.getTimezoneOffset()/60;

可用于将“enddate”转换为UTC时间。现在一切都在UTC中,并且它匹配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7251452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档