gpt4 book ai didi

javascript - 在 MomentJS 中设置时区

转载 作者:数据小太阳 更新时间:2023-10-29 06:15:49 25 4
gpt4 key购买 nike

我为我的 JavaScript SPA 应用程序编写了一些测试代码。我为整个 SPA 设置了语言环境,假装它在世界不同地方运行。

现在,我设置语言环境覆盖 Date() 类的 getTimezoneOffset() 函数:

Date.prototype.getTimezoneOffset = function () { return 120 };

而且效果很好。

但是,在 SPA 的某些部分,我使用的是 MomentJS(由于标准 DateTime 库的某些限制)。覆盖是否也会影响 MomentJS 语言环境?还是不行?

最佳答案

您不应覆盖 Date 对象的 getTimezoneOffset 函数。这实际上不会像您期望的那样工作。它只会改变偏移量通过 getTimezoneOffset 公开的方式,它不会改变 Date 对象本身的行为,或者它具有的其他功能。

code

在上面,您可以看到尽管更改了偏移函数,但日期仍然使用太平洋时间。

就 moment.js 而言,您当然可以使用 utcOffset 函数设置 moment 对象的偏移量。

var m = moment();
var o = m.utcOffset(); // returns the current offset
m.utcOffset(-120); // sets a different offset

但是:

  • 偏移量的符号符合 ISO8601 标准,正值是 UTC 的。 JavaScript 的 getTimezoneOffset 具有正值 west UTC。

  • 改变偏移量只会改变 moment 本身产生的值,例如 format 函数和其他各种函数。它不会及时更改基础时刻,因此如果您调用 .toDate() 来获取 Date 对象,该对象将具有原始系统时区。

  • Date 对象不能被欺骗到在其他时区工作。您可能遇到的任何尝试将时间偏移偏移量的方法都是有缺陷的,并且在一些极端情况下会失败。

  • 偏移量不是时区。时区可以根据夏令时以及其他历史和政治原因切换偏移量。阅读 the timezone tag wiki 中的“时区!= 偏移量” .如果您打算设置时区,那么您应该使用 moment-timezone插件,然后做类似的事情:

    moment().tz('America/New_York')
  • 您问过您现有的覆盖是否会弄乱 moment.js - 是的。 moment 使用 getTimezoneOffset 函数并期望它保持不变。

关于javascript - 在 MomentJS 中设置时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33668351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com