Javascript新日期对待不同的日期风格有不同的看法?

NSF*_*NSF 6 html javascript date

我在firefox scratchpad中测试了下面的代码并获得了有趣的结果?

var date=new Date("2012-05-12");
var date2 = new Date("05/12/2012");
date;
/*
Fri May 11 2012 17:00:00 GMT-0700 (Pacific Daylight Time)
*/
date2;
/*
Sat May 12 2012 00:00:00 GMT-0700 (Pacific Daylight Time)
*/
Run Code Online (Sandbox Code Playgroud)

两个日期不同.显然这是由于时区问题.我想要的是date2结果.如何使js引擎正确处理ISO日期样式?

Poi*_*nty 2

我认为问题在于字符串“2012-05-12”被视为 ISO 8601 日期,而“05/12/2012”是 RFC 2822 日期。在 ISO 格式中,缺少时区意味着 UTC。5 月 12 日上午午夜,在加利福尼亚州(或无论您身在何处),现在是前一天晚上 7 点。

然而,不带时区的 RFC 日期是在您需要本地时区午夜时间戳的假设下进行解析的。(好吧,不一定是你的时区;运行 JavaScript 的计算机的时区:-)

如果将这些字符串传递给 ,您可以看到差异Date.parse()

RFC 日期格式可以包含明确的时区,但 ISO 格式不能。(嗯,它可以,但浏览器不会注意到,显然 IE 根本不处理这些。)

编辑- 这是一个简单的(愚蠢的;没有错误检查)函数,它将为您提供该 3 部分 ISO 表单中的日期:

function isoDate( str ) {
  var rv = null;
  str.replace(/^(\d\d\d\d)-(\d\d)-(\d\d)$/, function(_, yr, mn, dy) {
    rv = new Date(parseInt(yr, 10), parseInt(mn, 10) - 1, parseInt(dy, 10));
  });
  return rv;
}
Run Code Online (Sandbox Code Playgroud)