2014-03-28 38 views
2

你好,我使用getTimezoneOffset它返回例如-60setTimezoneOffset整個腳本全局

我該如何設置javascript的全球時區偏移量?我試過setTimezoneOffset('-120');,但它不工作。我想在劇本開始時在全局設置它,所以稍後我將能夠簡單地調用var d = new Date(); var n = d.getTimezoneOffset();並返回我的值。請爲這種情況準確解決方案。謝謝!

+0

使用UTC日期方法而不是本地方法,並在需要時減去偏移量。 – Oriol

+1

基本上'Date.prototype.getTimezoneOffset = function(){return -120;};'做你需要的(並且只針對你的情況),但是有什麼意義,爲什麼不使用常規變量呢? – Teemu

+2

JavaScript並沒有真正的內置選項來指定要使用的時區。 '日期只懂2 - UTC/GMT和「*本地*」。而後者則由用戶的系統決定。 –

回答

2
Date.prototype.getTimezoneOffset = function() {return -120;}; 
+1

'新日期'實例似乎沒有考慮到這一點,雖然 –

+0

'Date.prototype.getTimezoneOffset = function(){return -520}; hours1 = new Date()。getHours(); Date.prototype.getTimezoneOffset = function(){return -120}; hours2 = new Date()。getHours(); hours1 === hours2 // true' – Maxmaxmaximus

1

我寫這篇填充工具FOR YOU(喜歡TOP)ONLY FOR YOU < 3 MY FRIEND 最佳解決方案1 ​​

使用:

// TO ALL dates 
Date.timezoneOffset(-240) // +4 UTC 

// Override offset only for THIS date 
new Date().timezoneOffset(-180) // +3 UTC 

代碼:

Date.prototype.timezoneOffset = new Date().getTimezoneOffset(); 

Date.setTimezoneOffset = function(timezoneOffset) { 
    return this.prototype.timezoneOffset = timezoneOffset; 
}; 

Date.getTimezoneOffset = function(timezoneOffset) { 
    return this.prototype.timezoneOffset; 
}; 

Date.prototype.setTimezoneOffset = function(timezoneOffset) { 
    return this.timezoneOffset = timezoneOffset; 
}; 

Date.prototype.getTimezoneOffset = function() { 
    return this.timezoneOffset; 
}; 

Date.prototype.toString = function() { 
    var offsetDate, offsetTime; 
    offsetTime = this.timezoneOffset * 60 * 1000; 
    offsetDate = new Date(this.getTime() - offsetTime); 
    return offsetDate.toUTCString(); 
}; 

['Milliseconds', 'Seconds', 'Minutes', 'Hours', 'Date', 'Month', 'FullYear', 'Year', 'Day'].forEach((function(_this) { 
    return function(key) { 
    Date.prototype["get" + key] = function() { 
     var offsetDate, offsetTime; 
     offsetTime = this.timezoneOffset * 60 * 1000; 
     offsetDate = new Date(this.getTime() - offsetTime); 
     return offsetDate["getUTC" + key](); 
    }; 
    return Date.prototype["set" + key] = function(value) { 
     var offsetDate, offsetTime, time; 
     offsetTime = this.timezoneOffset * 60 * 1000; 
     offsetDate = new Date(this.getTime() - offsetTime); 
     offsetDate["setUTC" + key](value); 
     time = offsetDate.getTime() + offsetTime; 
     this.setTime(time); 
     return time; 
    }; 
    }; 
})(this)); 

咖啡版本:

Date.prototype.timezoneOffset = new Date().getTimezoneOffset() 


Date.setTimezoneOffset = (timezoneOffset)-> 
    return @prototype.timezoneOffset = timezoneOffset 


Date.getTimezoneOffset = (timezoneOffset)-> 
    return @prototype.timezoneOffset 


Date.prototype.setTimezoneOffset = (timezoneOffset)-> 
    return @timezoneOffset = timezoneOffset 


Date.prototype.getTimezoneOffset = -> 
    return @timezoneOffset 


Date.prototype.toString = -> 
    offsetTime = @timezoneOffset * 60 * 1000 
    offsetDate = new Date(@getTime() - offsetTime) 
    return offsetDate.toUTCString() 


[ 
    'Milliseconds', 'Seconds', 'Minutes', 'Hours', 
    'Date', 'Month', 'FullYear', 'Year', 'Day' 
] 
.forEach (key)=> 
    Date.prototype["get#{key}"] = -> 
     offsetTime = @timezoneOffset * 60 * 1000 
     offsetDate = new Date(@getTime() - offsetTime) 
     return offsetDate["getUTC#{key}"]() 

    Date.prototype["set#{key}"] = (value)-> 
     offsetTime = @timezoneOffset * 60 * 1000 
     offsetDate = new Date(@getTime() - offsetTime) 
     offsetDate["setUTC#{key}"](value) 
     time = offsetDate.getTime() + offsetTime 
     @setTime(time) 
     return time