我从服务器收到一个日期时间作为字符串,可能如下所示:
07/08/2012 13:17:32
这是UTC时间。
或者它可能有格式的时区:
07/08/2012 13:17:32 UTC+01:00
我需要一种通用的方法将其解析为Date
对象以供显示。如果我执行var d = new Date(str)
,则它假设的第一个示例是本地时间。
编辑: 它可能并不总是字符串中的'UTC',我认为它可能是GMT,或Z,或任何其他时区指示符。
有什么想法吗?
答案 0 :(得分:2)
如果您的时区始终采用UTC + nn格式,并且正确解析了具有显式UTC TZ的字符串,正如我从您的问题中假设的那样,那么简单
if (date_string.search(/a-z/i) == -1) {
date_string += 'UTC+00:00'
}
会做的。
答案 1 :(得分:0)
作为一种快速而肮脏的解决方案,看起来时区是由空格分隔的格式的最后“部分”。因此,您可以计算输入字符串中“部分”的数量,如果没有找到则添加默认时区。例如:
function parseDateDefaultUTC(str) {
var parts = str.split(/\s+/);
return new Date((parts.length===3) ? str : str + ' UTC');
}
var d;
d = parseDateDefaultUTC("07/08/2012 13:17:32");
d; // => Sun Jul 08 2012 07:17:32 GMT-0600 (MDT)
d = parseDateDefaultUTC("07/08/2012 13:17:32 UTC+01:00");
d; // => Sun Jul 08 2012 06:17:32 GMT-0600 (MDT)