0
我們正在研究應用程序,我需要在自定義時區中顯示所有日期。我使用了使用javascript Date的外部庫(GWT ...)。我無法重寫GWT代碼。此外,JavaScript日期似乎是設置自定義時區的更好的地方。 我們第一次嘗試覆蓋「訪問器」使用原型機制:如何在瀏覽器時區使用不同的時區?
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構造函數,什麼是正確的方式?
感謝
你不應該覆蓋的日期構造函數。決不。相反,請使用UTC日期並僅爲格式化引入時區。 – Bergi