Impossible dates test values

Dates that do not exist, that are ambiguous, or that are written differently than the field assumes. 12 values, each with what it breaks and what a correct application does instead.

dates-impossible version 1.0, updated 2026-09-24 CC-BY-4.0

Type them one at a time with AltShiftN in the palette, or take them all into a script with nkb emit dates-impossible.

30 February

dates-impossible/feb-30
30.02.2026 30.02.2026
  • 10 graphemes
  • 10 code points
  • 10 bytes
  • 10 UTF-16 units
What it breaks
A date that cannot exist; naive parsers roll it over to the second of March instead of refusing it.
What a correct application does
Rejected with a message - never silently moved to another day.

29 February in a non-leap year

dates-impossible/feb-29-non-leap
29.02.2026 29.02.2026
  • 10 graphemes
  • 10 code points
  • 10 bytes
  • 10 UTF-16 units
What it breaks
Valid in some years and not in others, so the same input is correct or incorrect depending on the year field next to it.
What a correct application does
Rejected for non-leap years, with the reason stated.

31 November

dates-impossible/nov-31
31.11.2026 31.11.2026
  • 10 graphemes
  • 10 code points
  • 10 bytes
  • 10 UTF-16 units
What it breaks
The month-length check that most hand-written validators skip.
What a correct application does
Rejected, not rolled over into December.

Day and month in an ambiguous order

dates-impossible/ambiguous-day-month
03/04/2026 03/04/2026
  • 10 graphemes
  • 10 code points
  • 10 bytes
  • 10 UTF-16 units
What it breaks
The same text means March or April depending on convention, and nothing on screen says which was assumed.
What a correct application does
The expected order stated next to the field, or an unambiguous format enforced.

ISO 8601 date

dates-impossible/iso-format
2026-09-06 2026-09-06
  • 10 graphemes
  • 10 code points
  • 10 bytes
  • 10 UTF-16 units
What it breaks
A field expecting a local format receives the international one, and vice versa; both are legitimate user input.
What a correct application does
Both accepted, or one enforced with a visible example.

Year 9999

dates-impossible/year-9999
31.12.9999 31.12.9999
  • 10 graphemes
  • 10 code points
  • 10 bytes
  • 10 UTF-16 units
What it breaks
The upper end of most date types; often accepted by the interface and rejected by storage.
What a correct application does
The same range enforced on both sides.

Year 0000

dates-impossible/year-0000
01.01.0000 01.01.0000
  • 10 graphemes
  • 10 code points
  • 10 bytes
  • 10 UTF-16 units
What it breaks
Below the range of several date types, and the year zero does not exist in the common calendar.
What a correct application does
Rejected with a stated range.

Five-digit year

dates-impossible/year-10000
01.01.10000 01.01.10000
  • 11 graphemes
  • 11 code points
  • 11 bytes
  • 11 UTF-16 units
What it breaks
Five-digit years break fixed-width parsing and column formats without producing an obvious error.
What a correct application does
Rejected with a stated range.

Unix epoch

dates-impossible/epoch-zero
01.01.1970 01.01.1970
  • 10 graphemes
  • 10 code points
  • 10 bytes
  • 10 UTF-16 units
What it breaks
The zero point of the most common timestamp representation; frequently indistinguishable from "no date set".
What a correct application does
Stored and displayed as a real date, distinct from an empty field.

Negative timestamp

dates-impossible/negative-timestamp
-1 -1
  • 2 graphemes
  • 2 code points
  • 2 bytes
  • 2 UTF-16 units
What it breaks
Dates before the epoch are negative in many representations and are silently rejected or wrapped.
What a correct application does
Handled as an ordinary past date, or rejected with the supported range stated.

A date in words

dates-impossible/date-in-words
tomorrow tomorrow
  • 8 graphemes
  • 8 code points
  • 8 bytes
  • 8 UTF-16 units
What it breaks
Text in a date field: accepted by lenient parsers, which then produce a different date every day.
What a correct application does
Rejected - natural-language dates belong to a deliberate feature, not to a parser's leniency.

Slashes instead of dots

dates-impossible/dots-vs-slashes
06/09/2026 06/09/2026
  • 10 graphemes
  • 10 code points
  • 10 bytes
  • 10 UTF-16 units
What it breaks
The same date in another separator; forms often accept one and store the other without saying so.
What a correct application does
Accepted in both, normalised once, and shown in one consistent form.