在 IE 11 中格式化日期

Formatting date in IE 11

我们正尝试在电子商务 JavaScript 应用程序中设置日期格式。 我们尝试使用将“00:00:00”附加到日期字符串。 但在 IE 11 中,使用该字符串我们会收到无效日期错误。

所以我们尝试了更多选项,但我们得到的日期对象是意外的:

1. new Date(2017, 02, 10, 00, 00, 00, 000) -->
   Fri Mar 10 2017 00:00:00 GMT-0800 (Pacific Standard Time)

2. new Date("2017-02-10T00:00:00.000Z") -->
   Thu Feb 09 2017 16:00:00 GMT-0800 (Pacific Standard Time)

唯一有效的方法就是使用"moment.js"来解决这些问题。

感谢和问候

不清楚您是在询问有关创建日期还是将其格式化为字符串的问题。不过这里并没有什么意外。

new Date(2017, 02, 10, 00, 00, 00, 000)

您不应在数字上使用前导零。在某些情况下,在旧版浏览器中,它可以指示八进制而不是十进制。无论如何,以上将根据主机系统时区设置在 00:00:00 生成 2017 年 3 月 10 日的 "local" 日期。你的似乎设置为 UTC-08:00。

鉴于:

new Date("2017-02-10T00:00:00.000Z")

您要求 Date 构造函数解析一个字符串,这是众所周知的不擅长的事情。但是,早于 IE 8 的浏览器应该正确解析它并在 00:00:00 UTC 生成 2017 年 3 月 10 日的日期,其时区偏移量为 00:00.

由于您的时区是 -08:00,当您将其写入输出时,值将针对主机时区(即本地)进行调整,因此您会看到 2017 年 3 月 9 日 16 点的日期:00:00 (或下午 4 点)。

请注意,使用内置的 Date.prototype.toString 将导致依赖于实现的字符串在每个主机中可能不同。如果您需要有关格式化日期的信息,请参阅 Where can I find documentation on formatting a date in JavaScript? or How to format a JavaScript date

Is the only effective way is to use "moment.js" to solve these issues.

不清楚您要解决什么问题,但是一个好的、轻量级的解析和格式化库是 fecha.js. If you also want to do arithmetic, you might find moment.js 合适的。但是编写一个函数来解析特定格式或创建合适的字符串并不难,请参阅上面的链接。