JavaScript新日期(dateStr)以某些格式给出昨天的日期

前端之家收集整理的这篇文章主要介绍了JavaScript新日期(dateStr)以某些格式给出昨天的日期前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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,2014
Monday,January 20,2014

Firefox 26.0在控制台中返回以下内容

"Tuesday,2014"
"Invalid Date"
"Tuesday,2014"
"Monday,2014"

即使Internet Explorer 8也能正常运行,在控制台中返回以下内容

"Tuesday,2014"
"Tuesday,2014"
"NaN"

简而言之,我知道浏览器之间的日期处理是不一致的(Chrome和Firefox中的日期[2]不同,日期[3]在IE 8中完全中断),但这不是我的问题.

我的问题是:

Why would Chrome and Firefox return yesterday’s date for a YYYY-MM-DD
formatted date string specifying today’s date,when it works fine with
slashes?

另一个问题:

Is this a known issue?

我之前没有遇到它,也找不到任何问题的文档,也没有找到Date()对象的文档,这些文档会向我表明这种字符串转换会经常发生 – 不规则.有没有人有这方面的经验,也许是一个我没有找到的解释或链接?我可以在这里使用错误搜索词……

解决方法

JavaScript标准规定“官方”支持的格式是ISO 8601,看起来像YYYY-MM-DDTHH:mm:ss.sssZ. (Z是指定为“Z”(对于UTC)或“”或“ – ”后跟时间表达式HH:mm的时区偏移.)虽然格式包含时区偏移,但Firefox和Chrome(和我)认为IE)不注意,并始终将ISO 8601日期解释为UTC.

任何实现也可以接受其他格式,并且浏览器目前不同步. Firefox将接受RFC 2822日期,其他浏览器则不接受.

猜你在找的JavaScript相关文章