2012-02-23 59 views
0

在我的項目中,有幾個日期時間類型的字段,如航班的出發/到達日期和時間,無論用戶編輯如何,都應該完全相同他們。如何在使用Javascript設置/獲取價值時將日期時間字段設置爲時區中性

我使用ASP.NET MVC3和dojo構建應用程序。在後端,我可以將給定的值作爲UTC時間處理並保存到數據庫中。但是,當它使用Json傳遞給前端時,Javascript似乎將其調整爲當地時間,頁面上的日期/時間選擇器顯示調整後的值。看來,當我使用新的日期(...),它會自動調整到當地時間。

下面是我在頁面上使用的解析函數(因爲ASP.NET MVC3的JsonRest返回日期類似「/ Date(464371200000)/」)。

function (/*string*/dateStr) { 
     if (!dateStr) { 
      return dateStr; 
     } 
     var jsonResultPattern = /Date\([+-]?(\d+)\)/; 
     if (dateStr.match(jsonResultPattern)) { 
      return new Date(parseInt(dateStr.substr(6))); 
     } 
     else { 
      return dateStr; 
     } 
    }, 

我該如何實施這種情況?有最佳做法還是示例?

回答

1

改變返回爲UTC時間如下:

return new Date(parseInt(dateStr.substr(6))).toUTCString(); 

所有時間在JavaScript在內部存儲爲UTC。如果您希望函數返回實際的日期對象,並且您在小部件中使用某些方法(如getFullYear()),則會將其轉換爲本地時間。如果你想保持它在UTC,你必須使用UTC的方法,如:

dateObj.getUTCFullYear();   // Year as a 4-Digit Number 
dateObj.getUTCMonth();    // Month as a number from 0 - 11 
dateObj.getUTCDate();    // Day of the Month as a number from 1 - 31 
dateObj.getUTCDay();    // Day of the Week as a number from 0 - 6 
dateObj.getUTCHours();    // Hours as a number from 0 - 23 
dateObj.getUTCMinutes();   // Minutes as a number from 0 - 59 
dateObj.getUTCSeconds();   // Seconds as a number from 0 - 59 
dateObj.getUTCMilliseconds();  // Milliseconds as a number from 0 - 999 
dateObj.toUTCString();    // The entire Date as a string in UTC 

如果你要設置的對象,用同樣的方法同上,但改變搭話設置(如 - dateObj.setUTCFullYear(1984);)。

+0

但我需要Date對象傳遞給小部件。 – 2012-02-23 06:41:50

+0

我改變了答案以獲得更多信息。我不太清楚你準備做什麼,因爲你只展示瞭解析函數,但是有一些小部件有問題。無論哪種方式,我希望它有幫助。 – 2012-02-23 07:19:38

+0

謝謝史蒂夫。我嘗試了你的方式,經過一些簡單的測試後它工作正常。我需要更多時間來測試,因爲這是一個很大的修改。 – 2012-02-24 05:06:41

相關問題