如何在Express.js+MySQL中正确获取日期?日期显示异常求助
解决MySQL日期获取时区偏移问题
你遇到的是时区不匹配导致的日期显示异常:MySQL存储的2003-10-20本质是UTC时区的零点时间,而你的运行环境时区比UTC晚3小时(比如UTC-3时区),转换后就变成了2003-10-19 21:00:00,打印时只展示到小时部分就出现了2003-10-19T21的结果。
以下是几种直接有效的解决方法:
方案一:数据库连接时指定时区
在创建MySQL连接时,添加时区配置,强制连接使用与数据库存储一致的时区(比如UTC):const server = mysql.createConnection({ host: '你的数据库地址', user: '用户名', password: '密码', database: '数据库名', timezone: 'UTC' // 或设置为你需要的目标时区,例如'+08:00'代表东八区 });方案二:查询时直接格式化日期
修改SQL语句,用DATE_FORMAT函数直接将日期转为YYYY-MM-DD格式的字符串,避免时区自动转换:SELECT DATE_FORMAT(DOB_value, '%Y-%m-%d') AS DOB_value FROM users WHERE Name_value='resname';这样查询结果直接是字符串
2003-10-20,不会出现时区偏移问题。方案三:代码中手动格式化日期
如果不想改动连接或SQL,可以在获取结果后,将Date对象格式化为目标字符串:const rawDob = dob_result[0].DOB_value; // 转换为YYYY-MM-DD格式的字符串 const formattedDob = rawDob.toISOString().split('T')[0]; console.log(formattedDob); // 输出2003-10-20
内容的提问来源于stack exchange,提问作者cihantokerxxx
相关产品推荐
相关产品推荐

