JavaScript日期到MySQL日期时间转换

JavaScript日期到MySQL日期时间转换,javascript,mysql,date,datetime,Javascript,Mysql,Date,Datetime,我有一个js date变量 var date = "2017-01-23T10:17:50.285Z"; 我已将其存储在MySQL表中,列的类型为DATETIME 在数据库中存储后,表中的值如下所示: var mysqlFormate = new Date(date).toISOString().slice(0, 19).replace('T', ' '); 现在,当我尝试使用此列名从数据库中获取记录时,我是这样做的: var mysqlFormate = new Date(date).t

我有一个js date变量

var date = "2017-01-23T10:17:50.285Z";
我已将其存储在MySQL表中,列的类型为
DATETIME

在数据库中存储后,表中的值如下所示:

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

现在,当我尝试使用此列名从数据库中获取记录时,我是这样做的:

var mysqlFormate = new Date(date).toISOString().slice(0, 19).replace('T', ' ');
其输出为
2017-01-23 10:17:50

问题

您可以看到数据库中存储的值与转换后的值不同(
2017-01-23 15:47:50
2017-01-23 10:17:50
不同)

因此,我无法使用此列从数据库中获取数据


我在这里可能犯的错误是什么?谢谢。

检查如何在SQL Server上设置时区信息(或遵循约定)

将toISOString替换为formatLocalDate(),并使用以下定义

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);
}
函数formatLocalDate(){
var now=新日期(),
tzo=-now.getTimezoneOffset(),
dif=tzo>=0?'+':'-',
pad=函数(num){
var norm=Math.abs(Math.floor(num));
返回值(范数<10?'0':'')+norm;
};
现在返回。getFullYear()
+“-”+pad(now.getMonth()+1)
+“-”+pad(现在是.getDate())
+'T'+pad(now.getHours())
+“:”+pad(now.getMinutes())
+“:”+pad(now.getSeconds())
+dif+衬垫(tzo/60)
+“:”+pad(tzo%60);
}

有一个明确的5h30m,因此我假设您正在将GMT转换(或忘记)为IST偏移量。

为了以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);   
}

可能是时区问题。客户端和服务器之间的时间差正好为5小时30分。服务器通常应保持在UTC。尝试使用
Date.UTC()在客户端显示时间