【问题标题】:JavaScript new Date('[Date String]') doesn't understand : between timezone offsetJavaScript new Date('[Date String]') 不理解:时区偏移之间
【发布时间】:2013-11-22 19:21:54
【问题描述】:

我在 asp.net razor 页面中有一个隐藏字段,其中包含 datetimeoffset 值,我在 JavaScript 中使用它来创建日期对象。所以在 Chrome 中工作就像一个魅力,但在 IE 和 Firefox 中。我发现了愚蠢的错误。它是:偏移量的小时和分钟之间。 IE 和 Firefox 中的 JavaScript 理解 +0330 但无法解析 +03:30 并且我不知道如何格式化日期时间以更改为这种形状。 z、zz、zzz 和 K 只是返回偏移量 az +00:00 而不是 +0000。

new Date("11-20-2010 15:00:00 +03:30") Working in Chrome but in IE and Firefox
new Date("11-20-2010 15:00:00 +0330") Working in all

谁能帮帮我?

【问题讨论】:

  • "11-20-2010 15:00:00 +03:30".replace(/:([^:]*)$/,'$1');

标签: javascript date timezone


【解决方案1】:

JavaScript 中日期的字符串解析是高度特定于实现的。根据浏览器和浏览器版本,您会发现很多 的问题不仅仅是这个问题。你可以找到一些变化in the charts here

要在日期解析中实现真正的跨浏览器一致性,您需要放弃使用带有字符串的Date 构造函数。相反,请自己解析字符串或使用库。

最好的图书馆(恕我直言)是moment.js

// You would parse your string like this
var m = moment("11-20-2010 15:00:00 +03:30","MM-DD-YYYY HH:mm:ss Z");

// If you need a Date object back, you can get one easily
var d = m.toDate();

// Or you can use other functions, such as formatting to a string
var s = m.format("YYYY-MM-DD h:mm a");

此外,您可能希望首先从您的 asp.net 页面传递一个 ISO-8601 格式的字符串。在 .Net 中,使用 yourDateTimeOffset.ToString("o")。 Moment 可以默认解析这些,无需任何额外的说明符。

【讨论】:

  • 谢谢@Matt,我听说了 moment 但不幸的是我没有测试它。毕竟我开始编写自己的逻辑来计算 dateTime 并从以我的方式格式化的字符串中偏移。它现在可以工作,但我会尽快测试时刻,我会在这里写下我的经验。无论如何,我接受您的回复作为答案。再次感谢,祝你好运。
猜你喜欢
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-14
  • 1970-01-01
  • 2022-06-17
相关资源
最近更新 更多