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

使用Prisma+MySQL日期查询报错:期望ISO-8601格式DateTime

问题原因与解决方案

核心原因

Prisma 客户端对 DateTime 类型的查询参数有严格格式校验,必须遵循 ISO-8601 标准格式(例如 YYYY-MM-DDTHH:mm:ss)。你使用的 yyyy-MM-dd HH:mm:ss 格式里的空格属于无效字符,不符合Prisma的校验规则,因此直接触发报错。

而MySQL终端能正常执行是因为MySQL自身的SQL解析器兼容多种日期输入格式,但Prisma作为ORM,会在发送请求到数据库前完成参数校验,不通过则直接终止请求。

解决方案

1. 直接传入JavaScript Date对象(推荐)

无需手动格式化日期,Prisma会自动将Date对象转换为符合要求的ISO-8601格式字符串:

const startDate = new Date('2023-07-01');
const endDate = new Date('2024-06-30');

const result = await prisma.yourModel.groupBy({
  by: ['targetField'],
  where: {
    createdAt: {
      gte: startDate,
      lte: endDate
    }
  },
  // 其他groupBy配置(如_count、_sum等)
});

2. 将字符串转换为ISO-8601格式

如果必须使用字符串参数,把日期字符串中的空格替换为T即可:

// 手动替换方式
const formattedStart = '2023-07-01 00:00:00'.replace(' ', 'T');
const formattedEnd = '2024-06-30 00:00:00'.replace(' ', 'T');

// 用日期库生成(以dayjs为例)
import dayjs from 'dayjs';
const formattedStart = dayjs('2023-07-01').format('YYYY-MM-DDTHH:mm:ss');
const formattedEnd = dayjs('2024-06-30').format('YYYY-MM-DDTHH:mm:ss');

修改后再传入Prisma的groupBy查询条件,即可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:10:03