You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将时间戳转换为可存入SQL DATETIME的日期时间格式?

解决JS时间戳转SQL DATETIME格式的问题

首先得纠正你代码里的一个小错误:new Date()是创建当前时间的对象,你应该把时间戳作为参数传给Date构造函数,也就是new Date(resetPasswordExpires),而toString()方法不需要参数——它只是把Date对象转成人类可读的字符串,但这个格式确实不兼容SQL的DATETIME类型。

SQL的DATETIME列需要的是YYYY-MM-DD HH:mm:ss这样的标准格式,下面给你几种可靠的转换方法:

方法1:利用toISOString()快速转换

toISOString()会生成YYYY-MM-DDTHH:mm:ss.sssZ格式的字符串,我们只需要截取前19位,再把T替换成空格就能得到SQL兼容的格式:

const resetPasswordExpires = 1524133033085;
const date = new Date(resetPasswordExpires);
const sqlDateTime = date.toISOString().slice(0, 19).replace('T', ' ');
// 结果:"2018-04-19 09:21:02"(注意这里是UTC时间,如果你需要本地时区的时间,看方法2)

方法2:手动拼接本地时区的日期时间

如果你需要用服务器/客户端的本地时区而不是UTC,就手动获取年、月、日等部分,补零后拼接:

const resetPasswordExpires = 1524133033085;
const date = new Date(resetPasswordExpires);

// 注意月份是从0开始的,所以要+1
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
const seconds = String(date.getSeconds()).padStart(2, '0');

const sqlDateTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
// 结果:"2018-04-19 12:21:02"(和你之前toString的本地时区一致)

重要提醒:避免SQL注入!

千万不要直接把格式化后的字符串拼到SQL语句里(像你示例里那样),这会导致严重的SQL注入风险。正确的做法是用参数化查询,比如在Node.js的mysql库中,你可以这样写:

// 假设db是你的数据库连接对象
const updateQuery = `UPDATE User SET resetPasswordToken = ?, resetPasswordExpires = ? WHERE id = ?`;
const values = ['c2d313284f6de68cc1f18e3c45b0ea2c720220f0', sqlDateTime, userId];

db.query(updateQuery, values, (err, result) => {
  // 处理结果
});

参数化查询会自动处理格式转义和安全问题,比手动拼接字符串安全得多。

内容的提问来源于stack exchange,提问作者devRena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:59:19