Javascript新日期对不同的日期样式有不同的处理方式吗?

Javascript新日期对不同的日期样式有不同的处理方式吗?,javascript,html,date,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) */ 两

我在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日期样式?

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

但是,不带时区的RFC日期是在假设您希望在本地时区中的午夜时间戳的情况下解析的。(当然,不一定是您的时区;运行JavaScript的计算机的时区:-)

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

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

编辑-这里有一个简单的(哑;无错误检查)函数,它将为您提供由三部分组成的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;
}

根据标准,使用
Date()
,您可以以依赖于实现的方式解析ISO日期或依赖于实现的格式的日期。要获得更可靠的数据,请使用合适的库,该库可以解析某些已知格式的日期。

删除第一个示例中的前导零<代码>风险值日期=新日期(“2012-5-12”)@j08691导致一个“无效日期”错误,至少在Firefox中是这样。@Pointy-很好,我在Chrome中测试过。在IE8中,我得到了:LOG:NaN LOG:Sat May 12 00:00:00 UTC-0300 2012是的,你的答案实际上是我在想的。但是任何解决方案…?@NSF您可以自己解析ISO日期格式,然后显式构造日期。如果用数字构造日期,则应假定为本地时区。