0

我们正在开发需要在自定义时区中显示所有日期的应用程序。我使用使用 javascript Date 的外部库(GWT ...)。我无法覆盖 GWT 代码。此外,javascript Date 似乎是设置自定义时区的更好地方。我们首先尝试使用原型机制覆盖“访问器”:

var original_getUTCHours = Date.prototype.getUTCHours;
Date.prototype.getUTCHours = function(){
    // -4 for the time zone offset
    return original_getUTCHours.call(this)-4;
}
var myDate = new Date();
alert(myDate.getUTCHours()); 

但是这种机制似乎实现起来很长,因为有很多“访问器”需要覆盖。每个访问器都需要特定的算法来处理偏移量。

所以我们尝试使用原型机制来覆盖 Date 构造函数。

var original_date_constructor = Date.prototype.constructor;

function Date(){
    var now = original_date_constructor;
    original_date_constructor(now.getUTCFullYear(),now.getUTCMonth(),now.getUTCDate(),now.getUTCHours()-4,now.getUTCMinutes(),now.getUTCSeconds(),now.getUTCMilliseconds())
}

但是我们在 Chrome 调试器中得到了这个错误:

Uncaught TypeError: Object function Date(){

var now = original_date_constructor;
original_date_constructor(now.getUTCFullYear(),now.getUTCMonth(),now.getUTCDate(),now.getUTCHours()-4,now.getUTCMinutes(),now.getUTCSeconds(),now.getUTCMilliseconds());
} has no method 'getUTCFullYear'

是否可以覆盖 Date 构造函数,正确的方法是什么?

谢谢

4

1 回答 1

0

您需要重新应用Date原型:

Date.prototype = original_date_constructor.prototype;
于 2012-11-29T14:58:50.193 回答