我们正在尝试在电子商务JavaScript应用程序中格式化日期。 我们尝试将“00:00:00”附加到日期String。 但是在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”来解决这些问题。
谢谢和问候
答案 0 :(得分: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合适。但编写一个函数来解析特定格式或创建合适的字符串并不困难,请参阅上面的链接。