总结一下tracevipin帖子中的对话:
所有 Date 对象都基于自 1970-01-01T00:00:00Z 以来的毫秒时间值,因此它们的核心是 UTC。这与 UNIX 不同,UNIX 使用的值表示自同一纪元以来的秒数。
Date.prototype.toString方法返回一个依赖于实现的字符串,该字符串表示基于系统设置和客户端时区偏移量的时间(也称为本地时间)。
如果需要 UTC ISO8601 时间字符串,可以使用Date.prototype.toISOString方法。如果需要,很容易为此方法编写“垫片”。
最后,不要相信Date.parse来解析字符串。ES5 中指定了对 ISO8601 格式的 UTC 字符串的支持,但是它并没有在使用的浏览器中一致地实现。如果需要广泛的浏览器支持(例如典型的 Web 应用程序),手动解析字符串会更好(这并不难,有关于如何做的示例)。
简单的 ISO8601 UTC 时间戳解析器:
function dateObjectFromUTC(s) {
s = s.split(/\D/);
return new Date(Date.UTC(+s[0], --s[1], +s[2], +s[3], +s[4], +s[5], 0));
}
这是 toISOString 的垫片:
if (typeof Date.prototype.toISOString != 'function') {
Date.prototype.toISOString = (function() {
function z(n){return (n<10? '0' : '') + n;}
function p(n){
n = n < 10? z(n) : n;
return n < 100? z(n) : n;
}
return function() {
return this.getUTCFullYear() + '-' +
z(this.getUTCMonth() + 1) + '-' +
z(this.getUTCDate()) + 'T' +
z(this.getUTCHours()) + ':' +
z(this.getUTCMinutes()) + ':' +
z(this.getUTCSeconds()) + '.' +
p(this.getUTCMilliseconds()) + 'Z';
}
}());
}