目标:将ISO日期字符串转换为日期对象而不考虑时区
我有一个ISO字符串:2017-07-23T20:30:00.00Z。
我尝试使用以下方法将该字符串转换为Date:
new Date('2017-07-23T20:30:00.00Z')
moment('2017-07-23T20:30:00.00Z').toDate()
moment.utc('2017-07-23T20:30:00.00Z').toDate()
所有人都给出以下输出:Mon Jul 24 2017 02:00:00 GMT + 0530(India Standard Time)
这是不正确的。
你能告诉我如何获得字符串中的确切日期吗?
答案 0 :(得分:1)
只需删除' Z'最后的角色应该为你做到。
执行以下操作将打印:
moment('2017-07-23T20:30:00.00').toDate();
// Sun Jul 23 2017 20:30:00 GMT+0300 (GTB Daylight Time)
虽然这对我打印:
moment('2017-07-23T20:30:00.00Z').toDate();
// Sun Jul 23 2017 23:30:00 GMT+0300 (GTB Daylight Time)
这是因为' Z'在格式中使用时,字符不会导致将时间视为UTC。它匹配时区说明符。
指定' Z'在括号中,您匹配文字Z,因此时区默认保留,即本地时区。
答案 1 :(得分:0)
您应始终指定解析格式。在这种情况下,只需忽略“Z”:
var s = '2017-07-23T20:30:00.00Z';
var m = moment(s, 'YYYY-MM-DDTHH:mm:ss'); // <-- parse format without Z
console.log(m.format())
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
答案 2 :(得分:-1)
试试这个
"