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

时间:2016-08-22 09:57:59

标签: javascript

需要帮助才能完全从ISO日期字符串转换为日期: 我有一个ISO字符串日期:“2016-01-23T22:23:32.927”。 但是,当我使用NULL转换日期时,结果是错误的:

new Date(dateString)

结果是:var date = new Date("2016-01-23T22:23:32.927"); 。这不是真的。我希望日期是23而不是24。

请帮帮我。非常感谢!

4 个答案:

答案 0 :(得分:0)

您需要使用iso日期提供时区偏移量。由于没有一个,它假定日期为GMT,当您将其注销时,它会在浏览器的时区中打印出来。我认为,如果您将"2016-01-23T22:23:32.927+07:00"传递给new Date(),您将获得您期望的价值。

答案 1 :(得分:0)

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

发生了什么:

  • 您作为ISO格式传递给Date构造函数的字符串不指定时区。在这种情况下,它被视为UTC。
  • 当您输出日期时(我假设console.log),它将转换为您环境的时区。在这种情况下,添加了7个小时。

如果这不适合您,您可以更改输出日期的方式。这取决于您想要的输出,例如:

  • 如果您只想再次使用UTC时区,可以使用date.toISOString()
  • 如果您想在其他时区输出,可以拨打date.getTimezoneOffset()并找出两个时区之间的差异。然后,您可能需要获取各个日期部分并相应地添加/减去时区差异。此时,您可以考虑使用现有的库,同时考虑到它们可能存在的缺点。

答案 2 :(得分:-1)

使用datepicker 当它将日期对象转换为字符串时,它会给你23而不是24,根据世界时间

答案 3 :(得分:-2)

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

为此,首先从CDN加载它,例如, Moment.JS 2.14.1 minified。然后按如下方式使用它:

var date = moment("2016-01-23T22:23:32.927");
console.log(date);
// output:  Sat Jan 23 2016 22:23:32 GMT-0500

...即。你想要的结果:))

Here's a jsfiddle demonstrating this.