【问题标题】:moment-timezone setDefault not behaving as expectedmoment-timezone setDefault 未按预期运行
【发布时间】:2019-09-29 14:15:08
【问题描述】:

使用以下代码:

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 不能用于我想要的(这会生成一个新日期,就好像我在指定的时区一样),那么最好的选择是什么?

【问题讨论】:

    标签: momentjs moment-timezone


    【解决方案1】:

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

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

    如果您想要一个反映当前 utcOffset() 的 ISO8601 字符串,那么您可以像这样修改 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>

    【讨论】:

      猜你喜欢
      • 2012-04-11
      • 2018-02-10
      • 2014-11-12
      • 1970-01-01
      • 2020-06-28
      • 2012-02-18
      • 2018-01-18
      • 2012-06-14
      • 2019-03-03
      相关资源
      最近更新 更多