2017-05-17 56 views
2

我在MS SQL表中有日期類型列,我需要在JavaScript中將其轉換爲完整的日期和時間。這裏是我的代碼:將MS SQL日期轉換爲JavaScript全日期時間增加3小時

  $.ajax({ 
       type: "POST", 
       url: "http://localhost:8080/dates", 
       data: {}, 
       dataType: "JSON", 
       success: function(data) { 
        holidays = new Array(); 
        for (var i of data[0]) 
        { 
         date = new Date(i.holiday_date); 
         console.log(date); 
         holidays.push(date); 
        } 
       } 
      }); 

結果是:

星期一2017年5月1日03:00:00 GMT + 0300(FLE夏令時)

星期二2017年5月2日03: 00:00 GMT + 0300(FLE夏令時)

我的問題是爲什麼要增加三個小時?

回答

1

因爲結果日期不在你所在的時區,所以看看日期格式Mon May 01 2017 03:00:00 GMT+0300 (FLE Summer Time),GMT+0300意思是增加三個小時。

1

您可能將ISO 8601日期YYYY-MM-DD傳遞給Date對象,並將它們視爲UTC時間。因此,當轉換爲當地時間時,需要增加3小時。如果您傳遞unix時間戳,也會發生同樣的情況。

現在,您不應該在某處添加或移除3個小時以糾正錯誤,因爲它每年會在夏令時中斷兩次。

最好的方法是使用完整的ISO 8601時間戳YYYY-MM-DDTHH:mm:ss.sssZ,例如, 2017-05-02T00:00:00+03:00,或使用Date對象的構造不同的參數,因爲在這種情況下,那些被當作本地時間,不是UTC:

new Date(year, month, day); 

更多關於Date對象的位置:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

至於我能找到,你可以像這樣從SQL Server獲得完整的ISO 8601時間戳:

CONVERT(VARCHAR(24), GETDATE(), 127)