我正在尝试将我的客户端应用程序时间同步到我的服务器时间(这很重要,因为该应用程序是无服务器的并且可以离线工作)。在应用程序启动时,我计算时间差,然后重写 Date.now()
方法以将差异添加到原始 now 中。例如假设以下代码:
Date.__serverDifference = calculateServerDifference();
Date.__now = Date.now;
Date.now = () => Date.__now() + Date.__serverDifference;
而且效果很好。但问题在于其他日期功能。例如,如果我使用 new Date()
它将返回原始时间,并且不关心覆盖的 now 方法。
正如 MDN 文档所述:
JavaScript Date objects represent a single moment in time in a platform-independent format. Date objects contain a Number that represents milliseconds since 1 January 1970 UTC.
有没有办法重写 js Date 类以根据这个新计算返回所有当前时间?
最佳答案
最好的方法是创建辅助方法,其中包含内置函数未返回所需值的所有函数的偏移量。您的 Date.__now
是一个开始,但您还可以:
const offset = calculateServerDifference();
const newDateIncludingOffset = (...args) => {
const date = new Date(...args);
date.setMilliseconds(date.getMilliseconds() + offset);
return date;
};
然后将 new Date(...args)
的所有实例替换为 newDateInclusionOffset(...args)
。如果您已经有很多对新日期
的引用 - 咬紧牙关并适本地更改它们。
虽然您可以更改原型(prototype)上的方法,但 not such a good idea - 使用您自己的函数和方法而不更改内置函数是更好的方法。
您还可以使用自己的方法将 window.Date
完全替换为新的内容,从而允许您更改 Date 构造函数以考虑所需的偏移量 - 但同样,这不是一个好主意并可能导致脆弱的代码和不兼容问题。
关于javascript - 操作JS Date内部时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71232871/