猴子修补 JS Date 强制 UTC

Monkey patching JS Date to force UTC

提问人:Aprillion 提问时间:10/11/2023 最后编辑:Aprillion 更新时间:10/11/2023 访问量:46

问:

我们应用程序中的所有内容都使用 UTC,我们想要显示它,例如 从服务器总是午夜,不是 02:00 的 10。10 月的布拉格,不是纽约的 10 月 9 日晚上 8 点,只是没有时区的午夜。没有夏令时,没有闰秒,没有本地。一天结束,3小时后,...一切都在UTC中。as-is2023-10-10T00:00:00Z

我们使用 https://docs.dhtmlx.com/gantt/(需要原生 Date),并将从 Ant Design v4(moment)迁移到 v5(dayjs 或 date-fns)。

我们现有的代码是一团糟,在某些文件中添加和减去本机日期,而在其他文件中使用。.getTimezoneOffset()moment.utc()

我正在玩这个想法,只是用猴子修补 Date 对象来“一劳永逸”地解决这个问题:

/* eslint-disable no-extend-native, @typescript-eslint/no-unsafe-assignment */
Date.prototype.getTimezoneOffset = () => 0
Object.getOwnPropertyNames(Date.prototype).filter((method) => method.match(/UTC/)).forEach(method => {
  // @ts-expect-error
  Date.prototype[method.replace('UTC', '')] = Date.prototype[method]
}) 
/* eslint-enable */

我想问,但真的:What can possibly go wrong?

  • 我应该期待哪些潜在的错误?
  • 我们必须将哪些 npm 库放在“不使用”列表中?(或者更确切地说,评估库的步骤是什么?
打字稿 日期时间 UTC

评论

0赞 jcalz 10/11/2023
“it 'sometimes' displays a wrong date for 'some users'”中的引号是什么意思?它有时是否为某些用户显示错误的日期?
0赞 Aprillion 10/11/2023
这是关于如何报告时区错误并且很难调查,但这对问题并不重要,所以我删除了不必要的注释

答: 暂无答案