阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
解决方案
你遇到的问题是由于 Node.js 和 MySQL 的时区设置不一致导致的。Node.js 使用的是 UTC 时间,而 MySQL 使用的是服务器的时区。
解决方案是:
- 在 Node.js 中使用
moment-timezone 库将时间转换为 UTC 时间,然后将其存储到数据库中。 - 在 MySQL 中使用
TIMESTAMP 类型存储时间,可以自动将时间转换为服务器的时区。
示例代码:
const moment = require('moment-timezone');
const prisma = require('prisma');
// 将时间转换为 UTC 时间
const utcTime = moment.tz('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss');
// 将 UTC 时间存储到数据库中
prisma.user.create({
data: {
createdAt: utcTime,
},
});
在上面的代码中,我们使用 moment-timezone 库将时间转换为 UTC 时间,然后将其存储到数据库中。这样可以确保时间的准确性。
另外,如果你想在读取数据时将时间转换回原来的时区,可以使用 moment-timezone 库的 tz 方法。
const user = await prisma.user.findFirst({
where: {
id: 1,
},
});
const originalTime = moment.tz(user.createdAt, 'YYYY-MM-DD HH:mm:ss').tz('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss');
在上面的代码中,我们使用 moment-timezone 库将 UTC 时间转换回原来的时区。