2012-11-29 213 views
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構造函數,什麼是正確的方式?

感謝

+0

你不應該覆蓋的日期構造函數。決不。相反,請使用UTC日期並僅爲格式化引入時區。 – Bergi

回答

0

您需要重新申請Date原型:

Date.prototype = original_date_constructor.prototype; 
+0

當我需要重新應用原型?你能提供一個完整的例子嗎? – gontard

相關問題