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

PostgreSQL:如何按用户提交的原始值插入datetime?

解决Prisma+PostgreSQL特定表保留原始datetime值的问题

1. 修改目标表的字段类型为无时区时间戳

在你的Prisma Schema中,给目标表的datetime字段添加@db.Timestamp(withoutTimeZone)注解,强制数据库以无时区模式存储该字段,避免自动转换服务器时区:

model Activity {
  id       Int      @id @default(autoincrement())
  name     String
  datetime DateTime @db.Timestamp(withoutTimeZone) // 指定无时区存储
}

执行迁移命令更新数据库结构:

prisma migrate dev

2. 存储时直接传入原始时间字符串

避免将前端传入的时间转为Date对象(Date对象会携带本地/服务器时区信息,触发自动转换),直接传递前端提交的原始时间字符串:

// 示例:后端处理前端请求
async function createActivity(req) {
  const { name, datetime } = req.body;
  await prisma.activity.create({
    data: {
      name,
      datetime // 直接传入原始字符串,如"2022-12-01 01:00:00"
    }
  });
}

3. 验证结果

查询数据时,确认返回的datetime值与前端提交的原始值完全一致:

const activity = await prisma.activity.findFirst({
  where: { name: "Play Football" }
});
console.log(activity.datetime); // 应输出与前端提交一致的时间值

注意事项

  • 其他表的datetime字段保持默认配置(默认使用TIMESTAMP WITH TIME ZONE),不会受此修改影响。
  • 确保前端提交的时间格式符合PostgreSQL无时区时间的要求(如YYYY-MM-DD HH:MM:SS),避免解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:45:10