获取GMT时间的日期和时间

时间:2017-03-01 00:17:15

标签: javascript date datetime

我在GMT "2017-01-17 00:00:00.000"中有一个字符串,我希望时间和日期不同(字符串不必采用该格式)。 我试过了:

var datetime = new Date(calEvent.start);
var date = datetime.toLocaleDateString(); //output: 1/16/2017
var time = datetime.toLocaleTimeString(); //output: 4:00:00 PM

但我想要的日期和时间输出应该是GMT时区。任何人都知道如何在不使用字符串子串的情况下这样做? 感谢

1 个答案:

答案 0 :(得分:1)

字符串“2017-01-17 00:00:00.000”与ECMA-262中指定的ISO 8601子集不一致,在某些浏览器中无法正确解析。实际上,如果解析它将被视为本地。

您可以通过在日期和时间之间添加“T”来修改字符串,并在UTC中使用尾随“Z”,然后让Date构造函数解析它,例如

var s = '2017-01-17 00:00:00.000';
var d = new Date(s.replace(' ', 'T') + 'Z');
console.log(d);

哪些适用于大多数现代浏览器,但在IE等旧浏览器中会失败。您还可以编写一个小函数来将strting解析为UTC:

function parseAsUTC(s) {
  var b = s.split(/\D/);
  return new Date(Date.UTC(b[0], b[1] - 1, b[2], b[3], b[4], b[5], b[6]));
  }

console.log(parseAsUTC('2017-01-17 00:00:00.000'));

您也可以使用其中一种可用的库,但是如果只需要它来解析一种特定的格式,那么就没有必要了。

注意:

通常不建议使用Date构造函数(或Date.parse)解析字符串,因为它们在很大程度上依赖于实现,但ISO 8601扩展格式现在得到了很好的支持,并在ECMA-262中指定。

必须使用大写“Z”指定时区。如果使用“z”,Firefox(至少)将生成无效日期。