JavaScript新日期('[Date String]')不明白:时区偏移之间

时间:2013-11-22 19:21:54

标签: javascript date timezone

我在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

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

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可以在没有任何额外说明符的情况下解析它们。