假设我将此日期作为输入:
var _dateA = 2018-11-15T11:13:26.687Z
如果我在做什么,无论如何,
var _dateB = new Date(_date)
要么
var _dateB = moment(_date)
我得到这个结果==>
_dateB = Thu Nov 15 2018 12:13:26 GMT+0100 (heure normale d’Europe centrale)
我知道存在时区问题,但是如何获得Date对象或Moment对象,而不需要一个小时呢?
想要的结果=> Thu Nov 15 2018 11:13:26 GMT+0100
目前的结果=> Thu Nov 15 2018 12:13:26 GMT+0100
您需要使用Date.toUTCString()
,使用UTC时区将日期转换为字符串
var _dateA = '2018-11-15T11:13:26.687Z';
var _dateB = new Date(_dateA);
console.log(_dateB.toUTCString());
当您通过Date
,console.log()
等“输出”alert()
对象时,默认使用toString()
方法,将日期对象转换为本地时区字符串进行显示(这就是您在当地时间看到日期的原因)。
不建议使用Date
构造函数解析日期字符串(尽管我怀疑大多数浏览器可能会处理ISO 8601日期,就像问题中的那个,相当不错) - see the dateString parameter note here。因此,如果您需要构造日期对象以及输出日期字符串,那么您可以使用split()
使用多个分隔符的正则表达式字符集解析ISO 8601字符串,然后使用new Date(Date.UTC(...))
构造UTC日期对象。您也可以使用moment.js执行此操作,但下面应该更详细地说明发生了什么。
例如:
const text = '2018-11-15T11:13:26.687Z'
const [y, m, d, hh, mm, ss, ms] = text.split(/[-T:.Z]/);
const date = new Date(Date.UTC(y, m - 1, d, hh, mm, ss, ms));
console.log(date.toLocaleString()); // date string in local timezone
console.log(date.toUTCString()); // UTC date string
console.log(JSON.stringify(date)); // ISO 8601 date string in most browsers