【问题标题】:Problem with date formats in JavaScript with different browsers使用不同浏览器的 JavaScript 中的日期格式问题
【发布时间】:2010-08-25 13:10:13
【问题描述】:

我正在处理 RSS 提要中的日期,但在 IE、Chrome 和 Firefox 中使用以下代码时发现了不同的结果:

new Date('2001-01-01T12:00:00Z')

Firefox 对此很满意,但 Chrome 和 IE 返回 Invalid Date。

我想我会尝试如下替换 T 和 Z:

new Date('2001-01-01 12:00:00')

这一次 Chrome 对此很满意,但 Firefox 和 IE 返回 Invalid Date。

我应该怎么做才能在所有具有这种格式的浏览器中获取日期对象?!

非常感谢, 蒂姆

【问题讨论】:

    标签: javascript datetime date-format date-parsing


    【解决方案1】:

    这适用于我盒子上的所有浏览器 - 在控制台中尝试:

    alert(new Date('2001/01/31 12:00:00'))
    

    所以

    new Date('2001-01-01T12:00:00Z'.replace(/\-/g,'\/').replace(/[T|Z]/g,' '))
    

    IE8、FF3.6、Safari4、Chrome

    【讨论】:

    • 你说得对,这行得通,而且它是比我更好的解决方案。
    • 非常感谢!在 IE、FF、Chrome 和 Opera 中测试并为我工作!
    • 如何在 FF 上使用时区进行这项工作?因为这个 new Date('2001-01-01T12:00:00+1000'.replace(/\-/g,'\/').replace(/[T|Z]/g,' ')) 在 FF 中返回无效日期,但在 IE/Chrome 中有效
    • new Date('2001-01-01T12:00:00+1000') 在 Fx、Chrome 中运行良好
    【解决方案2】:

    您也可以尝试使用Date.js - 一个开源的 javascript 日期操作库。

    【讨论】:

    • momentjs (www.momentjs.com) 也解决了浏览器的差异。
    【解决方案3】:

    你可以试试:

    new Date(2001,0,1,12,0,0)
    

    这意味着:

    new Date(year,month,day,hour,minutes,seconds) 
    

    【讨论】:

    • 你的意思是 new Date(2001,0,1,12,0,0) 因为 JS 月份从 0 开始
    • 小心使用前导 0。 08 和 09 是无效的八进制数
    【解决方案4】:

    这适用于所有主要的 5 种浏览器,并导致所有浏览器将时间识别为 GMT/UTC 而不是本地时间(Z 后缀表示时间为 UTC):

    new Date('2001-01-01T12:00:00Z'.replace(/\-/g,'\/').replace(/T/,' ').replace(/Z/,' -0'))
    

    感谢 mplungjan 的回答。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-14
      • 1970-01-01
      相关资源
      最近更新 更多