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

如何在Node.js/Express项目使用UTC时区并配置Prisma模型时间字段

1 Node.js(含Express.js)项目全局UTC时区配置
  • 最推荐的方式是启动进程时传入TZ环境变量,无需修改业务代码:
    • Linux/macOS环境启动命令:TZ=UTC node your_app_entry.js
    • Windows cmd环境启动命令:set TZ=UTC && node your_app_entry.js
    • Windows PowerShell环境启动命令:$env:TZ='UTC'; node your_app_entry.js
    • 若使用PM2托管进程,可以在ecosystem配置文件的env字段中添加TZ: "UTC"配置
  • 也可以在项目入口文件的最顶部添加代码设置时区:process.env.TZ = 'UTC',注意这行代码必须放在所有import/require语句之前,否则部分提前读取时区的第三方包不会生效
  • 完成以上配置后,Node进程内所有new Date()、时间格式化等操作默认都会使用UTC时区,Express层面无需额外适配
2 Prisma.js DateTime字段UTC时间配置

Prisma的@default(now())、@updatedAt生成的时间默认取数据库服务的时区,所以按以下步骤配置即可:

  • 第一步:将数据库服务的默认时区设置为UTC,不同数据库配置方式不同:
    • MySQL:修改my.cnf配置文件,添加default-time-zone = '+00:00'后重启服务
    • PostgreSQL:修改postgresql.conf配置文件,添加timezone = 'UTC'后重启服务
    • 云数据库直接在厂商控制台的参数配置页修改时区参数即可
  • 第二步:修改Prisma Schema中的DateTime字段定义,指定字段存储UTC时间,修改后的你的Profile模型如下:
// PostgreSQL场景
model Profile {
  CreatedDate  DateTime  @default(now()) @db.Timestamptz
  ModifiedDate DateTime? @updatedAt @db.Timestamptz
}

// MySQL场景
model Profile {
  CreatedDate  DateTime  @default(now()) @db.DateTime(0)
  ModifiedDate DateTime? @updatedAt @db.DateTime(0)
}
  • 若不想修改数据库全局时区,也可以自行指定生成UTC时间的数据库函数,比如MySQL场景可以将默认值改为@default(dbgenerated("UTC_TIMESTAMP()")),不过该方式和数据库强绑定,兼容性较差,优先推荐修改数据库全局时区的方案
  • 注意:如果项目已经上线运行过迁移,修改字段类型需要生成新的迁移文件验证后再执行,避免损坏存量数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 13:54:10