如何使用格林尼治标准时间(GMT)时区获取ISOString的日期

时间:2019-12-14 06:50:34

标签: javascript typescript date momentjs toisostring

我知道日期

Fri Dec 20 2019 00:00:00 GMT+0600 (East Kazakhstan Time) 

但是当我转换为ISOString时,我会得到

2019-12-19T18:00:00.000Z

我想这个转换不会考虑时区。

我还尝试了使用矩时区和相同的结果进行转换。

moment("Fri Dec 20 2019 00:00:00 GMT+0600 (East Kazakhstan Time)").tz('Asia/Bishkek').toISOString()  


如果我带有时区的日期,我应该与时区转换
应该得到

2019-12-20T00:00:00.000Z

不是

2019-12-19T18:00:00.000Z

如果我做错了,但我犯了一个错误,请纠正我


已更新

我找到了解决我问题的解决方案

moment(this.data.start.getTime() - this.data.start.getTimezoneOffset()*60*1000).toISOString()

从格林尼治标准时间+0转换为格林尼治标准时间+6时区
现在是新问题:
如何使用momentjs使上面的代码更简单。还是足够?

1 个答案:

答案 0 :(得分:1)

  

我知道日期2019年12月20日星期五格林尼治标准时间+0600(哈萨克斯坦东部时间),但是当我转换为ISOString时,我得到了2019-12-19T18:00:00.000Z

时间戳表示时间完全相同。这里没有错误。

  

如果我获得了时区的日期,则应该使用时区进行转换。我应该得到2019-12-20T00:00:00.000Z

不,你不应该。您应该得到2019-12-19T18:00:00.000Z。

  

如果我做错了,但我犯了一个错误,请纠正我

你不对。

toISOString 始终为UTC。如果要使用ISO 8601格式和本地时区,请使用内置的解析器和默认的 moment 格式:

let s = 'Fri Dec 20 2019 00:00:00 GMT+0600 (East Kazakhstan Time)';

// Built–in parser, not recommended
let d = new Date(s);
// Format with moment.js
console.log(moment(d).format());

// Modify string for parsing with moment.js
let e = s.substr(0,33).replace('GMT','');
// Parse with moment.js
let m = moment(e, 'ddd MMM DD YYYY HH:mm:ss ZZ');
// Format with moment.js
console.log(m.format());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>