从数据库中获取UTC时间并在浏览器中显示本地时间

时间:2015-01-20 23:10:57

标签: javascript php datetime

我有一个包含UTC的DateTimes的表。我正在使用PHP将这些日期/时间字符串返回给JSON中的AJAX请求。我在前端收到的其中一个字符串的示例是“2014-12-22 09:36:54”。我想在当地时间向用户显示此信息。例如我在加利福尼亚州的UTC时间晚了8小时,所以我希望看到类似“2014-12-22 01:36:54”的内容。

在javascript中我尝试了新的Date(“2014-12-22T09:36:54”)。toLocaleString()并得到了“12/22/2014,9:36:54 AM”---基本上没有变化的日期/时间。

我尝试了新的日期(“2014-12-22T09:36:54”)。toUTCString()我得到了“星期一,2014年12月22日17:36:54 GMT”,这几乎与我的相反通缉。但我想这应该是显而易见的。

最后的想法......:

我是否需要做一些涉及getTimezoneOffset()的操作?

这会在PHP后端更容易解决吗?

最后一个注意事项是我包含了jstz.js认为它会有所帮助,但它所做的只是返回时区名称,而我不知道它是如何特别有用的。是否有任何函数将时区的名称作为参数在这种情况下有用?

1 个答案:

答案 0 :(得分:0)

要将像“2014-12-22 09:36:54”这样的UTC字符串可靠地转换为本地字符串,请手动解析它,例如:

function parseISOAsLocal(s) {
  var b = s.split(/\D/);
  return new Date(Date.UTC(b[0], b[1]-1, b[2], b[3], b[4], b[5]));
}

根据当前ECMA-262 standard(ed5),必须将不带时区的ISO 8601兼容字符串视为UTC。但是,draft version 6会将其更改为本地(根据ISO 8601)。大多数浏览器将其视为UTC,但Chrome将其视为本地(IE 8为NaN)。最好手动解析日期字符串并避免浏览器变幻莫测。