Date()将某些日期字符串转换为本地时间

时间:2012-05-23 05:51:38

标签: javascript

我试图通过将它们与Date()对象包装来比较两个日期字符串的相等性。我住在西雅图,由于某种原因,第二个日期字符串转换为PST,然后在GMT中呈现,结果如下:

new Date("January 1, 2012")
>>> Sun Jan 01 2012 00:00:00 GMT-0800 (PST)
new Date("2012-01-01")
>>> Sat Dec 31 2011 16:00:00 GMT-0800 (PST)

在Chrome控制台中尝试以上操作,您应该得到相同的结果。 如何获取日期以将第二个语句评估为GMT而不是PST?

3 个答案:

答案 0 :(得分:4)

不要使用Date对象来解析日期字符串,它在ECMAScript ed 3中被指定为依赖于实现,并且在浏览器中不一致。 ISO8601日期字符串的一种格式是specified in ES5,但这也不能一致地工作。手动解析字符串。

要转换为UTC ISO8601字符串的几个函数:

if (!Date.prototype.toUTCISOString) {

    Date.prototype.toUTCISOString = function() {
      function addZ(n) {
        return (n<10? '0' : '') + n;
      }
      function addZ2(n) {
        return (n<10? '00' : n<100? '0' : '') + n;
      }
      return this.getUTCFullYear() + '-' +
             addZ(this.getUTCMonth() + 1) + '-' +
             addZ(this.getUTCDate()) + 'T' +
             addZ(this.getUTCHours()) + ':' +
             addZ(this.getUTCMinutes()) + ':' +
             addZ(this.getUTCSeconds()) + '.' +
             addZ2(this.getUTCMilliseconds()) + 'Z';
    }
}

if (!Date.parseUTCISOString) {
    Date.parseUTCISOString = function fromUTCISOString(s) {
        var b = s.split(/[-T:\.Z]/i);
        var n= new Date(Date.UTC(b[0],b[1]-1,b[2],b[3],b[4],b[5]));
        return n;
    }
}

var s = '2012-05-21T14:32:12Z'
var d = Date.parseUTCISOString(s);

alert('Original string: ' + s +
      '\nEquivalent local time: ' + d +
      '\nBack to UTC string: ' + d.toUTCISOString());

答案 1 :(得分:2)

根据robg的建议,您可以查看DateJSmoment.js

答案 2 :(得分:0)

那是因为你的时区,你到了"2012-01-01"晚了8点,所以它的表现就像那样,对我来说我得到了这个

new Date("January 1, 2012")
Sun Jan 01 2012 00:00:00 GMT+0530 (IST)
new Date("2012-01-01")
Sun Jan 01 2012 05:30:00 GMT+0530 (IST)