gpt4 book ai didi

javascript - Monkeypatch Javascript 日期对象

转载 作者:行者123 更新时间:2023-11-28 20:01:30 24 4
gpt4 key购买 nike

我知道这是一个疯狂的黑客行为,但无论如何我对此感到好奇。我们的环境的系统时间错误,我们无法将其设置为正确的时间。它是专用硬件,因此我们无法更改系统时间。不过,我们确实有一项服务可以为我们提供正确的当前时间。我们的问题是,一堆 ssl 和 token 签名库崩溃了,因为它们从 javascript Date 对象获取了错误的日期时间(因为我们有错误的系统时间)。

如何对 Date 对象的构造函数进行猴子修补,以便我们可以为其提供正确的初始化时间,以便依赖库中对 Date()、Date.toString() 等的所有后续调用都将返回我们的新方法返回正确的非系统时间?

这行得通吗?

var oldDate = Date;
Date = function(){
return new oldDate(specialCallToGetCorrectTime());
}
Date.prototype = oldDate.prototype;

最佳答案

Will this work?

不,因为它不尊重给新 Date 函数的参数,也不尊重它是否作为构造函数调用。您还忘记修复 Date.now()。您仍然需要正确处理这些问题:

Date = (function (oldDate, oldnow) {
function Date(year, month, date, hours, minutes, seconds, ms) {
var res, l = arguments.length;
if (l == 0) {
res = new oldDate(Date.now());
} else if (l == 1) {
res = new oldDate(year); // milliseconds since epoch, actually
} else {
res = new oldDate(
year,
month,
l > 2 ? date : 1,
l > 3 ? hours : 0,
l > 4 ? minutes : 0,
l > 5 ? seconds : 0,
l > 6 ? ms : 0)
}
if (this instanceof Date) {
return res;
} else {
return res.toString();
}
}
Date.prototype = oldDate.prototype; // required for instanceof checks
Date.now = function() {
return oldnow() + offset; // however the system time was wrong
};
Date.parse = oldDate.parse;
Date.UTC = oldDate.UTC;
return Date;
})(Date, Date.now);

关于javascript - Monkeypatch Javascript 日期对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21591078/

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