我有一个包含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)。手动解析日期字符串并避免浏览器变幻莫测要好得多。