如何将 Yup date() 格式化为巴西格式?

How to format Yup date() to brazilian format?

我想使用 yup 来验证输入,该输入被用作生日。首先,我将简单的 .date() 函数添加到 yup 形状的对象,但它不接受巴西日期,因为格式与欧洲日期相同 (dd/MM/YYYY),我该如何继续?

使用.transform()通过传递以下参数的函数解析您的值:

  • value 作为当前日期由是的解析。

  • originalValue 作为原始输入值(例如“01/01/2022”)。

yup.date().transform((value, originalValue) => {
   // Do your parsing structure
   return newValue
})

请记住,您的 newValue 必须是 Date 对象,因为您要验证表单中的 yup.date() 类型。

您可以使用此示例作为解决方案,将您的值解析为“dd/MM/YYYY”格式:

// Input: '10/12/2022'

// yup.object({ [...]
birthday: yup.date().transform((value, originalValue) => {
   // originalValue = "10/12/2022"
   try {
      let date = originalValue.split('/')
      // date = ["10", "12", "2022"] <- day, month and year respectively

      if (date.length === 3) {
         let newDate = `${date[2]}-${date[1]}-${date[0]}`
         return new Date(newDate)
      }
      return null
   } catch (e) {
      return null
   }
}),
// [...] })

// Expected Output: '2022-10-12T00:00:00.000Z'

See yup docs about parsing values using .transform(): Yup Schema Basics - Parsing: Transforms