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

前端之家收集整理的这篇文章主要介绍了JavaScript新日期(dateStr)以某些格式给出昨天的日期前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
tl; dr – 当我尝试使用YYYY-MM-DD格式的日期字符串创建一个新的Date对象时,它给了我一个不正确的日期(昨天).为什么?

我写了以下测试代码来帮助我演示我所感知的问题:

  1. var dateConfig = {weekday: "long",year: "numeric",month: "long",day: "numeric"},dates = [
  2. "01/21/2014","01-21-2014","2014/01/21","2014-01-21"
  3. ];
  4.  
  5. for (var i = 0; i < dates.length; ++ i) {
  6. var date = new Date(dates[i]);
  7. console.log(date.toLocaleDateString("en-US",dateConfig));
  8. }

链接自己看:http://s.codepen.io/AdrianTP/fullpage/prKyf

Chrome 31.0.1650.63 m在控制台中返回以下内容

  1. Tuesday,January 21,2014
  2. Tuesday,2014
  3. Monday,January 20,2014

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

  1. "Tuesday,2014"
  2. "Invalid Date"
  3. "Tuesday,2014"
  4. "Monday,2014"

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

  1. "Tuesday,2014"
  2. "Tuesday,2014"
  3. "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相关文章