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


Taking UTC time from database and displaying local time in browser

我有一个包含UTC日期时间的表。我正在使用 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"---基本上是一个不变的日期/时间。

尝试了新的Date("2014-12-22T09:36:54").toUTCString(),我得到了"星期一,22 Dec 2014 17:36:54 GMT",这与我想要的几乎相反。但我想这应该是显而易见的。

最后的想法...:

我是否必须做一些涉及getTimezoneOffset()的操作?

在PHP后端上会更容易解决这个问题吗?

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

要将 UTC 字符串(如 "2014-12-22 09:36:54")可靠地转换为本地字符串,请手动解析它,例如:

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 标准 (ed5),没有时区的符合 ISO 8601 标准的字符串必须被视为 UTC。但是,草案版本 6 更改了将其视为本地(根据 ISO 8601)。大多数浏览器将其视为UTC,但Chrome将其视为本地(IE 8为NaN)。手动解析日期字符串并避免浏览器变幻莫测要好得多。

相关文章: