ISO 8601 Date Format

dates
VariationPattern
ISO 8601 Complete^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$
ISO 8601 Date (standalone)^\d{4}-\d{2}-\d{2}$
ISO 8601 Date (inline)\b\d{4}-\d{2}-\d{2}\b
ISO 8601 date+time (standalone)^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$
ISO 8601 simple date+time (inline)\b\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\b
Raw data
{
    "featured": true,
    "handle": "iso8601-date",
    "title": "ISO 8601 Date Format",
    "tags": [
        "dates"
    ],
    "todo": "Handle millis, missing separators, etc.",
    "variations": [
        {
            "title": "ISO 8601 Complete",
            "description": "from the [Intervals Blog](https://www.myintervals.com/blog/iso-8601-date-validation/)",
            "regex": "^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$",
            "inputs": [
                "2009-12T12:34",
                "2009",
                "2009-05-19",
                "2009-05-19",
                "20090519",
                "2009123",
                "2009-05",
                "2009-123",
                "2009-222",
                "2009-001",
                "2009-W01-1",
                "2009-W51-1",
                "2009-W511",
                "2009-W33",
                "2009W511",
                "2009-05-19",
                "2009-05-19 00:00",
                "2009-05-19 14",
                "2009-05-19 14:31",
                "2009-05-19 14:39:22",
                "2009-05-19T14:39Z",
                "2009-W21-2",
                "2009-W21-2T01:22",
                "2009-139",
                "2009-05-19 14:39:22-06:00",
                "2009-05-19 14:39:22+0600",
                "2009-05-19 14:39:22-01",
                "20090621T0545Z",
                "2007-04-06T00:00",
                "2007-04-05T24:00",
                "2010-02-18T16:23:48.5",
                "2010-02-18T16:23:48,444",
                "2010-02-18T16:23:48,3-06:00",
                "2010-02-18T16:23.4",
                "2010-02-18T16:23,25",
                "2010-02-18T16:23.33+0600",
                "2010-02-18T16.23334444",
                "2010-02-18T16,2283",
                "2009-05-19 143922.500",
                "2009-05-19 1439,55"
            ]
        },
        {
            "title": "ISO 8601 Date (standalone)",
            "regex": "^\\d{4}-\\d{2}-\\d{2}$",
            "inputs": [
                "2020-01-01",
                "2020-02-29",
                "2020-03-15",
                "2020-04-30",
                "2020-05-01",
                "2020-06-15",
                "2020-07-31",
                "2020-08-01",
                "2020-09-15",
                "2020-10-31",
                "2020-11-01",
                "2020-12-15"
            ]
        },
        {
            "title": "ISO 8601 Date (inline)",
            "regex": "\\b\\d{4}-\\d{2}-\\d{2}\\b",
            "inputs": [
                "My birthday is on 2020-01-01.",
                "I was born on 1970-01-01.",
                "The Ides of March is on 2020-03-15.",
                "2020-04-30 is the last day of the month.",
                "2020-05-01 is the first day of the month.",
                "2020-06-15 is halfway through the month.",
                "2020-07-31 is the last day of the month.",
                "2020-08-01 is the first day of the month.",
                "2020-09-15 is halfway through the month.",
                "2020-10-31 is Halloween.",
                "2020-11-01 is the day after Halloween.",
                "2020-12-15 is halfway through the month."
            ]
        },
        {
            "title": "ISO 8601 date+time (standalone)",
            "regex": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$",
            "inputs": [
                "2020-01-01T00:00:00",
                "2020-02-29T12:34:56",
                "2020-03-15T23:59:59",
                "2020-04-30T01:23:45",
                "2020-05-01T12:34:56",
                "2020-06-15T23:59:59",
                "2020-07-31T01:23:45",
                "2020-08-01T12:34:56",
                "2020-09-15T23:59:59",
                "2020-10-31T01:23:45",
                "2020-11-01T12:34:56",
                "2020-12-15T23:59:59"
            ]
        },
        {
            "title": "ISO 8601 simple date+time (inline)",
            "regex": "\\b\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\b",
            "inputs": [
                "My birthday is on 2020-01-01T00:00:00.",
                "I was born on 1970-01-01T00:00:00.",
                "The Ides of March is on 2020-03-15T23:59:59.",
                "2020-04-30T01:23:45 is the last day of the month.",
                "2020-05-01T12:34:56 is the first day of the month.",
                "2020-06-15T23:59:59 is halfway through the month.",
                "2020-07-31T01:23:45 is the last day of the month.",
                "2020-08-01T12:34:56 is the first day of the month.",
                "2020-09-15T23:59:59 is halfway through the month.",
                "2020-10-31T01:23:45 is Halloween.",
                "2020-11-01T12:34:56 is the day after Halloween.",
                "2020-12-15T23:59:59 is halfway through the month."
            ]
        }
    ],
    "fullPath": "/app/patterns/iso8601-date.yaml"
}