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”?
由于
答案 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()方法去掉你需要的东西。