ajv-formats
ajv-formats copied to clipboard
date-time validation fails with [email protected]
I have a schema as:
"createDate": {
"type": "string",
"format": "date-time"
},
It does not validate the below date:
"createDate": "2024-04-15T00:00:00",
It fails on validation with the error below:
[
{
"instancePath": "/createDate",
"schemaPath": "#/properties/createDate/format",
"keyword": "format",
"params": {
"format": "date-time"
},
"message": "must match format \"date-time\""
}
]
My settings are as below:
package.json:
"ajv": "^8.12.0",
"ajv-formats": "^3.0.1",
I just had to downgrade to "ajv-formats": "2.1.1"
There is no explicit changelog published but as the error message suggests date-time fields should have proper format; meaning that it must have timezone specified.
So, createDate should be like '2024-04-15T00:00:00Z'. You need to check if expecting a timezoned date-time value breaks any contract.
Based on https://datatracker.ietf.org/doc/html/rfc3339#section-5.6 i see partial-time and time could be without timezone, so v3 is doing it too much restrictive. Only way is to revert into v2
Based on https://datatracker.ietf.org/doc/html/rfc3339#section-5.6 i see
partial-timeand time could be without timezone, so v3 is doing it too much restrictive. Only way is to revert into v2
partial-time is part of the date-time but time-offset is also so the latter is required.
So the behaviour of requiring time-offset is in line with the RFC and the issue therefor invalid. I suggest you use ajv.addFormat to define your custom formats.