如何在JavaScript中将Timestamp转换为MySQL DateTime格式
解决方案
你手里的13位数字是毫秒级Unix时间戳,和Java里System.currentTimeMillis()返回的格式完全一致,Node.js中可通过以下几种方式转换为MySQL支持的YYYY-MM-DD HH:mm:ss DateTime格式:
1. 原生JS实现(无需第三方依赖)
const timestamp = 1631514003973; const date = new Date(timestamp); // 补零工具函数 const pad = (num) => num.toString().padStart(2, '0'); // 生成当前时区的DateTime const mysqlDateTime = `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`; // 如果需要生成UTC时区的DateTime,替换为以下方法 // const mysqlDateTime = `${date.getUTCFullYear()}-${pad(date.getUTCMonth() + 1)}-${pad(date.getUTCDate())} ${pad(date.getUTCHours())}:${pad(date.getUTCMinutes())}:${pad(date.getUTCSeconds())}`;
2. 用轻量时间库dayjs实现(代码更简洁)
先安装依赖:npm install dayjs
const dayjs = require('dayjs'); const timestamp = 1631514003973; // 当前时区DateTime const mysqlDateTime = dayjs(timestamp).format('YYYY-MM-DD HH:mm:ss'); // UTC时区DateTime // const mysqlDateTime = dayjs(timestamp).utc().format('YYYY-MM-DD HH:mm:ss');
3. 直接传Date对象给MySQL驱动(推荐)
如果你用的是mysql/mysql2这类Node.js MySQL驱动,不需要手动转换格式,直接把Date对象作为查询参数传入即可,驱动会自动完成适配:
const [result] = await connection.execute( 'INSERT INTO 表名 (时间字段名) VALUES (?)', [new Date(1631514003973)] );
注意事项
- 不要把毫秒级时间戳除以1000转成秒级再传入Date构造器,JS的Date和Java一致,默认接受毫秒级时间戳作为入参,做除法会导致时间完全错误。
- 业务中如果有跨时区需求,统一使用UTC时间做存储和传输,避免时区偏差导致的数据错误。
内容的提问来源于stack exchange,提问作者PeakGen
相关产品推荐
相关产品推荐

