Javascript Monkeypatch JavasScript日期对象
我知道这是一个疯狂的黑客行为,但无论如何我都很好奇。我们的环境具有错误的系统时间,无法将其设置为正确的时间。这是专门的硬件,所以我们不能改变系统时间。然而,我们确实有一项服务,为我们提供正确的当前时间。我们的问题是,大量ssl和令牌签名库中断,因为它们从javascript日期对象获取了错误的日期时间(因为我们有错误的系统时间) 如何monkeypatch Date对象的构造函数,以便我们可以为其提供正确的初始化时间,以便所有后续对Date()、Date.toString()等的调用。。。在依赖库中,将返回我们的新方法,该方法返回正确的非系统时间 这样行吗Javascript Monkeypatch JavasScript日期对象,javascript,datetime,Javascript,Datetime,我知道这是一个疯狂的黑客行为,但无论如何我都很好奇。我们的环境具有错误的系统时间,无法将其设置为正确的时间。这是专门的硬件,所以我们不能改变系统时间。然而,我们确实有一项服务,为我们提供正确的当前时间。我们的问题是,大量ssl和令牌签名库中断,因为它们从javascript日期对象获取了错误的日期时间(因为我们有错误的系统时间) 如何monkeypatch Date对象的构造函数,以便我们可以为其提供正确的初始化时间,以便所有后续对Date()、Date.toString()等的调用。。。在依赖
var oldDate = Date;
Date = function(){
return new oldDate(specialCallToGetCorrectTime());
}
Date.prototype = oldDate.prototype;
我刚刚在最新的Chrome、Firefox和IE上试用过,这是允许的。我不认为这比仅仅固定系统时间要好(当然可以固定),但这种方法是可行的。我刚刚在最新的Chrome、Firefox和IE中试用过,这是允许的。我不认为这比仅仅固定系统时间要好(当然可以固定),但这种方法是可行的。我刚刚在最新的Chrome、Firefox和IE中试用过,这是允许的。我不认为这比仅仅固定系统时间要好(当然可以固定),但这种方法是可行的。我刚刚在最新的Chrome、Firefox和IE中试用过,这是允许的。我不认为这比仅仅固定系统时间要好(当然可以固定),但这种方法是可行的。是的,前提是实现允许您重新定义window.Date
(礼貌的做法是将此类内容封装在一个闭包中)是的,前提是实现允许您重新定义window.Date
(礼貌的做法是将此类内容封装在一个闭包中)是的,前提是实现允许您重新定义window.Date
(礼貌的做法是将此类内容封装在一个闭包中)是的,前提是实现允许您重新定义window.Date (有礼貌的做法是把这类事情收尾) 这样行吗
var oldDate = Date;
Date = function(){
return new oldDate(specialCallToGetCorrectTime());
}
Date.prototype = oldDate.prototype;
否,因为它不考虑新的Date
函数的参数,也不考虑它是否作为构造函数调用。您还忘了固定日期。现在()
。您仍然需要正确处理这些问题:
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);
这样行吗
var oldDate = Date;
Date = function(){
return new oldDate(specialCallToGetCorrectTime());
}
Date.prototype = oldDate.prototype;
否,因为它不考虑新的Date
函数的参数,也不考虑它是否作为构造函数调用。您还忘了固定日期。现在()
。您仍然需要正确处理这些问题:
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);
这样行吗
var oldDate = Date;
Date = function(){
return new oldDate(specialCallToGetCorrectTime());
}
Date.prototype = oldDate.prototype;
否,因为它不考虑新的Date
函数的参数,也不考虑它是否作为构造函数调用。您还忘了固定日期。现在()
。您仍然需要正确处理这些问题:
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);
这样行吗
var oldDate = Date;
Date = function(){
return new oldDate(specialCallToGetCorrectTime());
}
Date.prototype = oldDate.prototype;
否,因为它不考虑新的Date
函数的参数,也不考虑它是否作为构造函数调用。您还忘了固定日期。现在()
。您仍然需要正确处理这些问题:
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);
你不能只使用
Date('2014年1月1日')代码>?也许我没有得到正确的要求。你能进一步澄清这个问题吗?你用什么样的“服务”来获得正确的时间?在我看来,花更多的精力来纠正一个荒谬的情况,比如坏的服务器时钟,会更好地利用时间。node.js中有很多库和其他库,它们通过调用new date()来依赖正确的日期。像https和aws库这样需要签名令牌的东西。这些都是由于错误的系统时间而中断的。我不能深入所有的库,找出它们调用Date()的每个实例。我们有一个特殊的呼叫,可以让我们从正在运行的专用硬件上的通道获得正确的时间。。这个硬件还阻止我们将系统时间设置为正确的值。我认为您最好尝试在源代码Node.js中找到系统时间的位置,并添加您需要添加的内容,而不是尝试在javascript中重写日期对象。您不能只使用Date('1/1/2014')代码>?也许我没有得到正确的要求。你能进一步澄清这个问题吗?你用什么样的“服务”来获得正确的时间?在我看来,花更多的精力来纠正一个荒谬的情况,比如坏的服务器时钟,会更好地利用时间。node.js中有很多库和其他库,它们通过调用new date()来依赖正确的日期。像https和aws库这样需要签名令牌的东西。这些都是由于错误的系统时间而中断的。我不能深入所有的库,找出它们调用Date()的每个实例。我们有一个特殊的呼叫,可以让我们从正在运行的专用硬件上的通道获得正确的时间。。这个硬件还阻止我们将系统时间设置为正确的值。我认为您最好尝试在源代码Node.js中找到系统时间的位置,并添加您需要添加的内容,而不是尝试在javascript中重写日期对象。您不能只使用Date('1/1/2014')代码>?也许我没有得到正确的要求。你能进一步澄清这个问题吗?你用什么样的“服务”来获得正确的时间?在我看来,花更多的精力来纠正一个荒谬的情况,比如坏的服务器时钟,会更好地利用时间。node.js中有很多库和其他库,它们通过调用new date()来依赖正确的日期。像https和aws库这样需要签名令牌的东西。这些都是由于错误的系统时间而中断的。我不能深入所有的库,找出它们调用Date()的每个实例。我们有一个特别的电话,让我们