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

时间:2012-06-25 19:18:48

标签: javascript html 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)
*/

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

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

通过标准Date(),您可以依赖于实现的方式,以依赖于实现的格式解析ISO日期或日期。为了获得更可靠的信息,请使用合适的库来解析某些已知格式的日期。