数据库读取时间问题?

需要做的是把mysql中的datetime类型的时间读出来放到页面上:
clipboard.png

router.get('/', function(req, res, next) {
    pool.getConnection(function (err,connection) {
        var sql1 = 'SELECT * FROM manage';
        connection.query(sql1, function (err, result) {
            connection.release();
            var string=JSON.stringify(result);
            var result=JSON.parse(string);
            res.render('history', {persons:result});
        });
    })
});  

得到的时间却是这样的:
clipboard.png
感觉应该是时区的问题,请问下有什么办法把时区改过来,让网页上得到的值和数据库中的值相同?

阅读 6.8k
4 个回答

写一个函数,把时间的数据进行转化。
function transformTime(db_time){

        let time = new Date(db_time);
        let Y = time.getFullYear();
        let M = conversion(time.getMonth()+1);
        let D = conversion(time.getDate());
        let H = conversion(time.getHours());
        let Mi = conversion(time.getMinutes());
        let S = conversion(time.getSeconds());
        return Y+'-'+M+'-'+D+' '+H+':'+Mi+':'+S
    }
  function  conversion(t){
        if(t<10){
            return '0'+t
        }
        return t;
    }

这是标准UTC日期格式,JSON.stringify(new Date())也可以得到种格式的时间;

T 表示必需的时间部分的起始;
Z 表示是标准时间(如:将Z替换成-8:00表示比UTC时间滞后8小时)

有可能是数据库时区是+8:00,北京时间,所以转换成成标准时间会少8个小时

然而js并没有提供能转换回去的API,手动减掉吧…

如果你是使用 node 中的 mysql 模块连接数据库,在连接的选项中有个设置

let mysql = require('mysql');
let connection = mysql.createConnection({
  'connectionLimit': 10,
  'host': 'localhost',
  'user': 'root',
  'password': 'root',
  'database': 'node_site',
  'dateStrings': true  //将时间转换为字符串
})
module.exports = connection;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题