我在 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 根本不处理这些。)
edit — 这是一个简单的(愚蠢的;没有错误检查)函数,它会为您提供 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;
}
关于Javascript 新日期对不同日期样式的处理方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11195881/