如何让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
相关产品推荐
相关产品推荐

