2017-03-16 13 views
0

我知道Date對象正在使用機器時區(代碼正在運行)。我有一個特定的用例,我需要清除偏移量。如何刪除getTimezoneOffset

var d = new Date(); 
console.log(d.getTimezoneOffset()) 

這將打印UTC的偏移量。 我想強制抵消爲零,我這樣做

var getTimezoneOffset = Date.prototype.getTimezoneOffset; 
Date.prototype.getTimezoneOffset = function removeTimezoneOffset() { 
    return 0; 
    }; 

和我重置我做了一件

Date.prototype.getTimezoneOffset = getTimezoneOffset 

這將在eslint失敗抱怨Date prototype is read only, properties should not be added後。 有沒有更好的方法去除時間偏移?

+1

爲什麼你需要清除偏移?你想實現什麼? –

+0

我試圖用UTC打印日期,而不管機器時區。 – codereviewanskquestions

+0

然後使用'Date.UTC'〜https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/UTC – Phil

回答

1

我感覺你正在使用一些其他的代碼,使用getTimezoneOffset而不是修改該代碼,你正在改變方法。

不知道具體的問題,你也可以只由當地時區改變偏移的日期,讓「本地」方法返回UTC值:

function formatAsISO(d){ 
 
    function z(n){return (n<10?'0':'')+n} 
 
    return d.getFullYear() + '-' + z(d.getMonth()+1) + '-' + 
 
     z(d.getDate()) + ' ' + z(d.getHours()) + ':' + 
 
     z(d.getMinutes()) + ':' + z(d.getSeconds()); 
 
} 
 

 
var d = new Date(); 
 

 
// Local date 
 
console.log('Local : ' + formatAsISO(d)); 
 

 
// UTC equivalent 
 
console.log('UTC  : ' + d.toISOString()); 
 

 
// Adjust so local looks like UTC 
 
d.setMinutes(d.getMinutes() + d.getTimezoneOffset()); 
 
console.log('Adjusted: ' + formatAsISO(d));

它修改實際日期,因此您可能需要將其副本傳遞給(未指定)函數。