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

如何通过Prisma Client向PostgreSQL传递'YYYY-MM-DD'格式日期?

问题:NestJS + Prisma 中如何正确传递PostgreSQL Date类型字段的值

我有一个使用Prisma的NestJS应用,对应PostgreSQL中的public.Transaction表,表结构如下:

Table "public.Transaction"
Column |       Type        |               
-------+-------------------+
id     | integer           |
amount | double precision  |
date   | date              |

在Prisma中,该表的模型定义如下:

model Transaction {
  id                Int      @id @default(autoincrement())
  amount            Float   
  date              DateTime @db.Date
}

由于使用PostgreSQL,我需要传递YYYY-MM-DD格式的日期。尝试直接传入字符串格式的日期:

const createdTransaction = await this.prisma.transaction.create({
  data: {
    amount: 3333,
    date: '2022-11-22',
  },
});

但出现如下错误:

Argument date: Got invalid value '2022-11-22' on prisma.createOneTransaction. Provided String, expected DateTime.

我知道需要传入Date类型,但JavaScript处理后结果会转为字符串。若使用new Date(2022,11,22),虽然能被Prisma接受,但存储的是带时区的字符串Thu Dec 22 2022 00:00:00 GMT+0100 (Central European Standard Time),不符合PostgreSQL的预期。请问在NestJS中,应该给date字段传入什么值?


解决方案

1. 使用ISO格式字符串创建Date对象

直接用YYYY-MM-DD格式的字符串初始化Date对象,Prisma会自动将其解析为符合PostgreSQL DATE类型要求的值,不会带入时区信息:

const createdTransaction = await this.prisma.transaction.create({
  data: {
    amount: 3333,
    date: new Date('2022-11-22'),
  },
});

2. 构造UTC时间的Date对象

如果担心本地时区影响日期准确性,可以用Date.UTC()构造UTC时间的Date对象(注意月份是0-based,10对应11月):

// 构造2022年11月22日的UTC时间
const targetDate = new Date(Date.UTC(2022, 10, 22));
const createdTransaction = await this.prisma.transaction.create({
  data: {
    amount: 3333,
    date: targetDate,
  },
});

这种方式创建的Date对象,Prisma存储时会提取正确的日期部分,最终在PostgreSQL中保存为纯日期。

3. 使用Prisma Raw SQL(可选)

如果上述方法都不适用,可以直接通过Prisma的Raw SQL传入字符串格式的日期,让PostgreSQL直接解析:

import { Prisma } from '@prisma/client';

const createdTransaction = await this.prisma.transaction.create({
  data: {
    amount: 3333,
    date: Prisma.sql`'2022-11-22'`,
  },
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 00:54:29