1

使用以下代码:

console.log(moment().toJSON());
moment.tz.setDefault("Europe/Brussels");
console.log(moment().toJSON());

我得到以下结果:

2019-05-12T10:39:12.851Z
2019-05-12T10:39:12.863Z

但是,当我阅读 moment-timezone 的文档时,setDefault应该在“Europe/Brussels”上设置我的默认时区,所以输出应该是:

2019-05-12T10:39:12.851Z
2019-05-12T11:39:12.863Z

显然,setDefault不能用于我想要的(生成一个新日期,就好像我在指定的时区一样),那么最好的选择是什么?

4

1 回答 1

3

setDefault按预期工作,问题是您显示时刻实例值的方式。toJSON()显示 UTC 时间(另见toISOString().toISOString()返回 UTC 时间戳):

将对象序列化为 JSON 时,如果有Moment对象,则表示为 ISO8601 字符串,调整为 UTC。

相反,如果您想要一个反映时刻的 ISO8601 字符串utcOffset(),那么您可以toJSON像这样修改函数:

moment.fn.toJSON = function() { return this.format(); }

所以你可以format()改用,这里有一个现场样本:

console.log(moment().toJSON());
console.log(moment().format());
moment.tz.setDefault("Europe/Brussels");
console.log(moment().toJSON());
console.log(moment().format());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone-with-data-2012-2022.min.js"></script>

于 2019-05-12T22:15:39.960 回答