【问题标题】:Formatting date in IE 11在 IE 11 中格式化日期
【发布时间】:2017-02-10 17:51:21
【问题描述】:

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

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

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”来解决这些问题。

感谢和问候

【问题讨论】:

标签: javascript date momentjs date-formatting


【解决方案1】:

不清楚您是在询问创建日期还是将它们格式化为字符串。但是这里没有什么意外的。

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

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

给定:

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

您要求 Date 构造函数解析一个字符串,这是众所周知的不擅长的事情。但是,IE 8 之前的浏览器应正确解析它并生成 2017 年 3 月 10 日 00:00:00 UTC 的日期,其时区偏移量为 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?How to format a JavaScript date

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

目前尚不清楚您要解决什么问题,但是fecha.js 是一个良好、轻便、解析和格式化的库。如果您还想做算术,您可能会发现moment.js 合适。但是编写一个函数来解析特定格式或创建合适的字符串并不难,请参见上面的链接。

【讨论】:

    猜你喜欢
    • 2020-10-18
    • 2019-04-19
    • 1970-01-01
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 2017-02-13
    • 2021-01-23
    相关资源
    最近更新 更多