乐闻世界logo
搜索文章和话题

How can zod date type accept ISO date strings?

2 个月前提问
2 个月前修改
浏览次数43

1个答案

1

在使用 zod 这个库来进行数据校验时,你可以使用 zod.date() 来创建一个日期的校验器。为了接受并验证一个 ISO 日期字符串,你需要使用 zod.string() 来确保输入是一个字符串,并结合 zod.preprocess() 来转换这个字符串为一个日期对象。这样做可以让你先验证字符串是符合 ISO 格式,再将其转化为 JavaScript 的 Date 对象。

具体实现步骤如下:

  1. 使用 zod.string() 确保输入是一个字符串。
  2. 使用 zod.preprocess() 将合法的 ISO 字符串转换为 Date 对象。
  3. 使用 zod.date() 确保转换后的结果是一个有效的 Date 对象。

下面是一个具体的示例代码:

javascript
import { z, ZodError } from 'zod'; const isoDateStringSchema = z.preprocess((arg) => { if (typeof arg === 'string') { const date = new Date(arg); if (!isNaN(date.getTime())) { return date; } } return arg; }, z.date()); try { // 测试一个有效的 ISO 日期字符串 const result = isoDateStringSchema.parse('2021-12-01T14:48:00.000Z'); console.log(result); // 正确输出: 2021-12-01T14:48:00.000Z (日期对象) } catch (e) { if (e instanceof ZodError) { console.log(e.errors); // 如果有错误,打印错误信息 } } try { // 测试一个无效的 ISO 日期字符串 isoDateStringSchema.parse('not-a-date'); } catch (e) { if (e instanceof ZodError) { console.log(e.errors); // 正确捕获错误并打印 } }

在这个示例中,preprocess 函数尝试将输入的字符串转换为 Date 对象。如果转换成功并且结果是一个有效日期(即 Date 对象不是 "Invalid Date"),则这个预处理函数返回该 Date 对象。之后,z.date() 验证这个对象确实是一个有效的 Date 对象。

这种方法允许你灵活地处理和验证 ISO 日期字符串,并确保它们在你的应用程序中以 Date 对象的形式正确使用。

2024年7月21日 19:46 回复

你的答案