2017-01-23 107 views
0

我有一個js日期變量JavaScript的日期到MySQL日期時間轉換

var date = "2017-01-23T10:17:50.285Z"; 

我已存儲此在MySQL表,並在數據庫中的表的外觀的值存儲後列有類型DATETIME

像這樣:

enter image description here

現在,當我試圖用這個列名我要得到數據庫中的記錄現在做的是這樣的:

var mysqlFormate = new Date(date).toISOString().slice(0, 19).replace('T', ' '); 

即給予輸出2017-01-23 10:17:50

問題

你可以看到存儲在數據庫中的值大於轉換值(2017-01-23 15:47:502017-01-23 10:17:50不同是不同的)。

所以我無法使用此列從數據庫中獲取數據。

我在這裏可能犯的錯誤是什麼?謝謝。

+0

可能是一個時區問題。客戶端和服務器之間的差別恰恰是5小時30分鐘。服務器通常應保持UTC。嘗試使用Date.UTC()來顯示客​​戶端的時間 –

回答

0

檢查如何在SQL Server上設置時區信息(或按照約定)。

new Date(date).toISOString().slice(0, 19).replace('T', ' ') 

與下面的定義

function formatLocalDate() { 
var now = new Date(), 
    tzo = -now.getTimezoneOffset(), 
    dif = tzo >= 0 ? '+' : '-', 
    pad = function(num) { 
     var norm = Math.abs(Math.floor(num)); 
     return (norm < 10 ? '0' : '') + norm; 
    }; 
return now.getFullYear() 
    + '-' + pad(now.getMonth()+1) 
    + '-' + pad(now.getDate()) 
    + 'T' + pad(now.getHours()) 
    + ':' + pad(now.getMinutes()) 
    + ':' + pad(now.getSeconds()) 
    + dif + pad(tzo/60) 
    + ':' + pad(tzo % 60); 
} 

有一個明確的5h30m,所以我想你要轉換(或遺忘)的GMT,以取代formatLocalDate()的toISOString IST偏移。

0

爲了顯示在JS當地時間有Date.UTC()功能,它告訴了你約會即將給它在UTC,這種方式表達了瀏覽器,瀏覽器將應用所需的轉換並顯示爲當地時間。

function getLocalTime(mysqlDate) { 
    var dateTime = mysqlDate.split(' '); 
    var date = dateTime[0].split('-'); 
    var time = dateTime[1].split(':'); 
    var utc = Date.UTC(date[0], date[1], date[2], time[0], time[1], time[2]); 
    return new Date(utc); 
}