日期ISO日期字符串问题

时间:2016-04-23 14:51:28

标签: javascript date

console.log(new Date('2016-05-24').toISOString()); // '2016-05-24T00:00:00.000Z'
console.log(new Date('05/26/2016').toISOString()); // '2016-05-23T23:00:00.000Z' // why?

我正在向服务器发送数据进行解析,并希望确保服务器能够正确编码我的日期。

在两种情况下,将日期转换为字符串的最简单方法是“2016-05-24T00:00:00.000Z”?

由于

3 个答案:

答案 0 :(得分:2)

console.log(new Date('2016-05-24 GMT').toISOString()); // '2016-05-24T00:00:00.000Z'
console.log(new Date('05/24/2016 GMT').toISOString()); // '2016-05-24T00:00:00.000Z'

timezone 附加到创建新日期对象之前的日期,以便Date构造函数中的字符串解析代码不会混淆。如果可能的话,总是消除歧义。

由于格式化日期的方式,您的代码为每个解析使用了不同的时区。一个是使用+0时区,另一个是使用-1时区,因此日期在创建ISO字符串时被拉回一小时。

答案 1 :(得分:1)

一个是在UTC时间解析,一个是在本地时间解析。

new Date('2016-05-24').toISOString()  // '2016-05-24T00:00:00.000Z'
new Date('05/24/2016').toISOString()  // '2016-05-24T07:00:00.000Z'

玩,这是一个解决方案:

new Date(new Date('05/24/2016') - (new Date()).getTimezoneOffset() * 60000).toISOString() // '2016-05-24T00:00:00.000Z'

战略:

  • 创建新的偏移日期
  • 减去偏移量
  • 根据该结果创建新日期

参考链接:

在进一步考虑时,我建议将日期字符串解析为" universal"在将它传递给日期构造函数之前。类似的东西:

var tmp = ('05/24/2016').split('//');
var universal = [tmp[2], tmp[0], tmp[1]].join('-'); // 2016-05-24
...

此外,Moment.js非常巧妙地做了这种事情。

答案 2 :(得分:0)

使用getDate(),getMonth()和getFullYear()方法去掉你需要的东西。