2015-01-20 88 views
1

我有一个包含UTC时间的表格。我使用PHP将这些日期/时间字符串以JSON形式返回给AJAX请求。我在前端收到的其中一个字符串的示例是“2014-12-22 09:36:54”。我想在当地时间将其显示给用户。例如,我在加利福尼亚州的UTC时间后面8个小时,所以我想看到类似“2014-12-22 01:36:54”的内容。从数据库中获取UTC时间并在浏览器中显示本地时间

在JavaScript中,我尝试了新的日期(“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

当涉及到日期和时间时,JavaScript是非常难以使用的。如果你可以用PHP解决它,那么做,而不是让你头痛。 – 2015-01-20 23:13:45

+0

请参阅http://stackoverflow.com/a/439871/65387 – mpen 2015-01-20 23:14:28

+0

我没有看到什么库或工具可以帮助;如果您在输入中没有时区,那么您无法通过奇迹般地创造它。如果你有一个有效的日期,它会显示在正确的时间使用toLocaleString – dandavis 2015-01-20 23:14:52

回答

0

为了可靠地转换为UTC字符串,如“情节中字九时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])); 
} 

没有时区的ISO 8601标准的字符串,一定要及时治疗作为UTC根据当前ECMA-262 standard(ed5)。但draft version 6更改为将其视为本地(按照ISO 8601)。大多数浏览器将其视为UTC,但Chrome将其视为本地(而IE 8为NaN)。更好地手动分析日期字符串并避免浏览器变幻莫测。

+1

酷,另一个下来的选民懒得打扰解释或提供一个替代的答案。 – RobG 2015-01-21 22:58:03

相关问题