JavaScript新日期('[Date String]')没有't理解:时区之间的偏移

JavaScript new Date('[Date String]') doesn't understand : between timezone offset

本文关键字:时区 理解 之间 Date 日期 新日期 JavaScript String 没有      更新时间:2023-09-26

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

有人能帮我吗?

JavaScript中日期的字符串解析是高度特定于实现的。根据浏览器和浏览器版本的不同,您会发现不止这一个问题。你可以在这里找到图表中的一些变化。

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

最好的库(IMHO)是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可以在默认情况下解析这些,而不需要任何额外的说明符。