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

如何让NuxtUI日期输入框生成ISO 8601格式日期字符串?

解决Prisma要求ISO-8601格式日期的问题

问题核心是前端type="date"输入框返回的YYYY-MM-DD格式字符串,不符合Prisma DateTime类型要求的标准ISO-8601格式(如2023-12-08T00:00:00.000Z)。以下是几种直接可行的解决方法:

方法1:通过Zod直接转换为ISO格式

修改Zod校验规则,在coerce.date()后添加转换逻辑,将Date对象转为ISO字符串:

const schema = z.object({
  // 其他字段
  memberSince: z.coerce.date().transform(date => date.toISOString()),
});

此时schema.safeParse(event.data)返回的结果中,memberSince会自动变成符合要求的ISO-8601格式字符串,直接传给store即可。

方法2:在提交函数中手动处理格式

如果不想改动Zod规则,可在提交时手动转换日期:

async function onSubmit(event: FormSubmitEvent<any>) {
  const parsedResult = schema.safeParse(event.data);
  if (parsedResult.success) {
    const finalData = {
      ...parsedResult.data,
      // 将Zod转换后的Date对象转为ISO字符串
      memberSince: parsedResult.data.memberSince.toISOString()
    };
    personsStore.addPerson(toRaw(finalData));
  }
}

方法3:适配纯日期场景(可选)

如果业务只需要日期、不需要时间信息,可以调整Prisma Schema的类型定义:

memberSince Date @db.Date

修改后Prisma会直接接受YYYY-MM-DD格式的字符串,无需额外转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:52:46