【问题标题】:How parse JS Date to be consistent in all browsers如何在所有浏览器中解析 JS Date 以保持一致
【发布时间】:2015-12-08 05:00:38
【问题描述】:

我现在一直在纠结一个问题,但无法弄清楚。

问题:

我有这个日期字符串:2015-08-25T08:00:00Z

我正在尝试将此字符串解析为 JS 日期:var date = new Date( date_string );

如果我记录这个:
- 铬:Tue Aug 25 2015 10:00:00 GMT+0200 (CEST)
- Safari:Tue Aug 25 2015 10:00:00 GMT+0200 (CEST)
- Firefox:Date 2015-08-25T08:00:00.000Z (为什么 Firefox 显示的时间与其他浏览器不同?)

但我希望它们都显示我解析的日期。
另一件事是:我不希望字符串受到时区的影响。 结果在所有浏览器中都应该是带有日期字符串的日期。

还尝试使用moment.js 进行解析,但即使这样也没有解决我的问题。

谢谢!!

【问题讨论】:

  • 试试 moment.js - 它将减轻 100 倍的压力????
  • 我做到了,但我在时区偏移方面遇到了同样的问题。
  • 是的,你可以肯定,只是用 moment 解析它更简洁一些 - 你可以使用相同的 tz 偏移量。
  • @remus:解析没有问题,这是 ecma 规范要求的,所以所有浏览器都这样做;不需要一个库来统一解析标准日期格式......现在,如果你想格式化日期或解析奇怪的格式,那么是的,moment 可以节省大量的工作量。

标签: javascript google-chrome firefox safari cross-browser


【解决方案1】:

我自己想通了。

如果我记录这个:

console.log( date.getHours() );

所有浏览器的输出都是一样的。

如果这样做的话,要摆脱时区的东西:

var date = new Date( date_string );
date = new Date( date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours() );  

但是谁能告诉我,为什么 firefox 显示的是别的东西,然后是其他浏览器,即使它是同一个对象?

【讨论】:

  • 解析很好,并且在任何地方都 100% 相同,只是控制台输出格式不同。日期对象作为字符串的格式是特定于实现的,不是规范要求的。这种关于它应该是什么样子的看法没有对错之分,尽管很多人确实特别抱怨 FF。我更喜欢使用重新偏移 ISOString() 并替换“T”以在所有浏览器中获得一致的输出。这很痛苦,但它也是一个不需要库的单行修复。
猜你喜欢
  • 1970-01-01
  • 2014-05-04
  • 2017-01-16
  • 2022-01-17
  • 1970-01-01
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 2013-08-03
相关资源
最近更新 更多