将ISO日期字符串转换为Date对象而不考虑时区

时间:2017-07-18 05:23:00

标签: javascript date datetime momentjs

目标:将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)

这是不正确的。

你能告诉我如何获得字符串中的确切日期吗?

3 个答案:

答案 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)

试试这个

"