ajv-validator / ajv-formats

JSON Schema format validation for Ajv v8+
https://ajv.js.org
MIT License
177 stars 35 forks source link

date-time validation fails with ajv-formats@3.0.1 #96

Open hasan-y-tr opened 2 months ago

hasan-y-tr commented 2 months ago

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:

    "ajv": "^8.12.0",
    "ajv-formats": "^3.0.1",

I just had to downgrade to "ajv-formats": "2.1.1"

mustafababil commented 2 months ago

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.

radeno commented 2 months ago

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

silverwind commented 1 month ago

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.