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コンストラクターをovverideしようとしました。

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 に答える