在JavaScript中将ISO日期字符串转换为日期

在JavaScript中将ISO日期字符串转换为日期,javascript,Javascript,需要帮助将ISO日期字符串精确转换为日期: 我有一个ISO字符串日期:2016-01-23T22:23:32.927。 但当我使用new DateString转换日期时,结果是错误的: var date = new Date("2016-01-23T22:23:32.927"); 结果是:太阳2016年1月24日05:23:32 GMT+0700。这不是真的。我希望日期是23号而不是24号 请帮帮我。非常感谢 您需要提供iso日期的时区偏移量。因为没有,所以它假设日期是GMT,当您注销它时,它

需要帮助将ISO日期字符串精确转换为日期: 我有一个ISO字符串日期:2016-01-23T22:23:32.927。 但当我使用new DateString转换日期时,结果是错误的:

var date = new Date("2016-01-23T22:23:32.927");
结果是:太阳2016年1月24日05:23:32 GMT+0700。这不是真的。我希望日期是23号而不是24号


请帮帮我。非常感谢

您需要提供iso日期的时区偏移量。因为没有,所以它假设日期是GMT,当您注销它时,它会在浏览器的时区中打印出来。我认为,如果您将2016-01-23T22:23:32.927+07:00改为新日期,您将获得您期望的值。

如果您愿意并且能够添加依赖项,我建议使用矩.js。它使Javascript中的日期处理更加简单和安全,并立即修复您的特定问题

为此,首先从CDN加载,例如。然后按如下方式使用:

var date = moment("2016-01-23T22:23:32.927");
console.log(date);
// output:  Sat Jan 23 2016 22:23:32 GMT-0500
…即。您期望的结果:

使用date.toutString
根据世界时的JavaScript环境浏览器,节点,。。。使用单个时区将日期格式化为字符串。通常这是系统的时区。根据您得到的输出,您的是GMT+0700

那么发生了什么:

作为ISO格式传递给日期构造函数的字符串未指定时区。在这种情况下,它被视为UTC。 然后,当您使用console.log输出我将假定的日期时,它将转换为您环境的时区。在这种情况下,添加7小时。 如果这不适合您,您可以更改输出日期的方式。这取决于您想要的输出,例如:

如果您只想再次使用UTC时区,可以使用date.toISOString。 如果要在另一个时区中输出,可以调用date.getTimezoneOffset并计算两个时区之间的差异。然后,您可能需要获得各个日期部分,并相应地加/减时区差。在这一点上,你可以考虑使用现有的库,考虑到它们可能的缺点。
谢谢你,@rdubya。但是我得到的那个字符串日期DB@DoanMinhTien我只是指出,它创建的日期是提供它的字符串的正确日期。如果你需要对它进行操作,你需要假设它是在GMT时间,除非你把它转换成另一个时区。Vijay建议使用moment.js可以帮助解决这一问题,但它也需要时区信息。我不确定下一票是从哪里来的-这个答案给出了在Node 4、Chrome、IE10、FF中测试的多个js环境中所需的结果,并且进一步解决了OP的问题。如果这是建议的依赖性,我仍然坚持我的答案——它避免了这些答案往往陷入的主要陷阱:1我没有对OP的项目做出假设:瞬间几乎可以毫不费力地融入任何东西;2我不建议添加大型框架或通用库,例如React或jQuery——这是一个小型的、有针对性的库,旨在解决与OP类似的问题。此外,依赖性并不是一个过火的建议——它实际上是一个很好的建议,无论OP是否存在此问题。JS Date对象以多种方式被破坏,有许多违反直觉的行为,在某些情况下甚至会引入安全漏洞。它不应以裸体形式用于生产Web应用程序。OP无论如何都应该使用MomentJS作为日期…这样做恰好也会自动解决他们的特定问题。请用答案澄清您的特定问题。由于您环境的时区是GMT-0500,所以您恰好得到了一个月的同一天。当his设置为GMT+0700时,它仍然会在OP的环境中返回一个不同的月份。在您的示例中没有理由使用矩。请看我的答案来解释。