javascript - 如何使用 GMT 时区获取 ISOString 的日期
问题描述
我得到日期
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()
从 GMT +0 转换为 GMT +6 时区
现在新问题:
如何使用 momentjs 使上述代码更简单.. 或者这就足够了?
解决方案
我得到日期 Fri Dec 20 2019 00:00:00 GMT+0600(东哈萨克斯坦时间)但是当我转换为 ISOString 我得到 2019-12-19T18:00:00.000Z
时间戳代表完全相同的时刻。这里没有错误。
如果我得到带有时区的日期,我应该使用时区进行转换。我应该得到 2019-12-20T00:00:00.000Z
不,你不应该。你应该得到 2019-12-19T18:00:00.000Z。
如果我不正确并且我犯了错误,请纠正我
你看起来不太对劲。
toISOString始终为 UTC。如果您想要 ISO 8601 格式和本地时区,请使用内置解析器和默认时刻格式:
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>
推荐阅读
- algorithm - 在桶排序中使用快速排序时,桶排序是否稳定?
- php - 处理特定列上的唯一键错误
- angular - 如何在 Angular 中对 NGXS 进行单元测试?
- amazon-web-services - 如何识别 aws ebs 块卷名称与通过 terraform 创建的实际设备名称(rhel)之间的映射?
- assembly - 无法使用 nasm 编译具有 xmmword 操作数大小的汇编代码
- for-loop - 使用步骤 1 在 0 到 5 的向量中创建所有可能的组合?
- html - 聊天框 html-css 不关注最近的消息
- python - Colab 上没有名为“tensorflow.compat.v2”的模块
- algorithm - 距离和时基计算
- node.js - 电子商务应用使用 Node.js 和 MySQL Sequelize 生成 pdf 发票