【发布时间】:2014-02-11 10:00:27
【问题描述】:
tl;dr - 当我尝试使用 YYYY-MM-DD 格式的日期字符串创建一个新的 Date 对象时,它给了我一个不正确的日期(昨天)。为什么?
我编写了以下测试代码来帮助我演示我所感知的问题:
var dateConfig = {weekday: "long", year: "numeric", month: "long", day: "numeric"},
dates = [
"01/21/2014",
"01-21-2014",
"2014/01/21",
"2014-01-21"
];
for (var i = 0; i < dates.length; ++ i) {
var date = new Date(dates[i]);
console.log(date.toLocaleDateString("en-US", dateConfig));
}
查看链接:http://s.codepen.io/AdrianTP/fullpage/prKyf
Chrome 31.0.1650.63 m 在控制台中返回以下内容:
Tuesday, January 21, 2014
Tuesday, January 21, 2014
Tuesday, January 21, 2014
Monday, January 20, 2014
Firefox 26.0 在控制台中返回以下内容:
"Tuesday, January 21, 2014"
"Invalid Date"
"Tuesday, January 21, 2014"
"Monday, January 20, 2014"
即使是 Internet Explorer 8 也能正确处理大部分内容,在控制台中返回以下内容:
"Tuesday, January 21, 2014"
"Tuesday, January 21, 2014"
"Tuesday, January 21, 2014"
"NaN"
简而言之,我知道浏览器之间的日期处理不一致(Chrome 和 Firefox 中的日期 [2] 不同,而日期 [3] 在 IE 8 中完全中断),但这不是我的问题。
我的问题是:
为什么 Chrome 和 Firefox 会为 YYYY-MM-DD 返回昨天的日期 格式化日期字符串,指定今天的日期,当它可以正常工作时 斜线?
另一个问题:
这是一个已知问题吗?
我以前没有遇到过,也找不到任何有关该问题的文档,也找不到 Date() 对象的文档,这表明这种字符串转换会如此定期地发生。有没有人有这方面的经验,也许是我没有找到的解释或链接?我可能只是在这里使用了错误的搜索词...
【问题讨论】:
标签: javascript date