3

我从服务器收到一个日期时间作为字符串,可能如下所示:

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 或任何其他时区符号。

有任何想法吗?

4

2 回答 2

2

如果您的时区始终采用 UTC+nn 格式,并且具有显式 UTC TZ 的字符串被正确解析,正如我从您的问题中假设的那样,那么简单

if (date_string.search(/a-z/i) == -1) {
 date_string += 'UTC+00:00'
}

会做。

于 2012-08-07T15:26:46.197 回答
1

作为一种快速而肮脏的解决方案,时区似乎是由空格分隔的格式的最后“部分”。因此,您可以计算输入字符串中“部分”的数量,如果没有找到,则添加默认时区。例如:

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)
于 2012-08-07T15:27:08.973 回答