2014-03-13 19 views
3

我從具有UTC格式時間的數據庫接收日期。 日期與我無關,我只需要小時和分鐘。JavaScript Mountain夏令時奇數行爲

問題

當我發送的日期到數據庫我把它轉換從本地時間到UTC使用此功能:

self.toUTC = function (date) { 

    var now = new Date(date);  
    var utc = new Date(now.getTime() + now.getTimezoneOffset() * 60000); 

    return utc; 
}; 

當我在開發者工具看從Chrome中我看到這樣的:

enter image description here

奇怪的是,當我收到從數據巴斯日期e並將其轉換回當地時間,由於日光節約時間的原因,它爲格林威治標準時間-0600獲取正確的格林威治標準時間。我使用這個功能吧:

//converts date to just time in utc format to include in menu 
self.setTimeForMenu = function (dateUTC) { 

    var date = new Date(dateUTC + ' UTC');   

    var hours = (date.getHours()<10?'0':'') + date.getHours(); 
    var minutes = (date.getMinutes()<10?'0':'') + date.getMinutes(); 

    return hours + ':' + minutes; 
};  

當我看到在Chrome開發者工具的日期我看到這一點:

enter image description here

我已經試過

  1. 上述JavaScript函數的組合
  2. moment.js但我得到了相同的結果結果

對於接下來我應該做什麼,你們有沒有建議?

編輯1
如果我使用now.toUTCString()或now.toISOString(),因爲當我搶的日期,並將其設置在一個新的日期JavaScript對象,它已經將其設置爲它不會改變任何東西GMT -0700:

enter image description here

+0

'now.getTimezoneOffset()'返回什麼?所有瀏覽器都是一樣的嗎? –

+0

對於所有瀏覽器是420,這意味着GMT -0700 – euther

+0

您可以顯示一個示例用法來說明如何使用'toUTC()'函數嗎?我不認爲這樣的功能是必要的。您可以使用[getUTCHours()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCHours)和[getUTCMinutes()](https:// developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes)獲取UTC時間.. –

回答

0

當您發送日期回服務器,你應該把它作爲一個ISO UTC字符串,只需使用

date.toISOString();

如果你需要顯示UTC時間,你可以只使用date.getUTCHours()date.getUTCMinutes()

我不認爲有必要的JS日期爲UTC的轉換。也就是說,JS不允許您在特定區域設置(UTC或任何其他)中創建日期,只有您的計算機設置爲該日期。也就是說,getTimeZoneOffset()總是在當地時間。

+0

仍然在GMT -0700獲得日期,請參閱我的編輯以獲取更多信息 – euther