ajv-formats icon indicating copy to clipboard operation
ajv-formats copied to clipboard

date-time validation fails with [email protected]

Open ghost opened this issue 1 year ago • 3 comments

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"

ghost avatar Apr 20 '24 09:04 ghost

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.

mustafababil avatar Apr 30 '24 12:04 mustafababil

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

radeno avatar May 09 '24 19:05 radeno

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

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.

silverwind avatar Jun 04 '24 21:06 silverwind