すべての日付をカスタムタイムゾーンで表示する必要があるアプリケーションに取り組んでいます。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コンストラクターをオーバーライドすることは可能ですか?正しい方法は何ですか?
ありがとう