Date Validator: The Silent Rollover Problem
Ask a browser whether 2023-02-29 is a date and it will say yes — and hand you 1 March 2023. It does not fail, it rolls over. The same is true of 2026-04-31, which quietly becomes 1 May, and of 2026-13-01, which becomes January 2027. Any check written on top of that behaviour reports impossible days as perfectly good ones, and the error surfaces much later, in a record that says something happened on a day that never existed.
This date validator does not use the parser as its judge. It splits the string into year, month and day and range-checks each field against the real length of that month in that year, applying the full leap-year rule. That is why it can reject a date and tell you why: not "invalid date", but "February 2023 has only 28 days, so there is no February 29. 2023 is not a leap year."
It also names the format it read. A numeric date like 01/02/2026 genuinely has two meanings, so instead of picking one silently the validator marks it as valid-with-a-caveat, spells out both readings, and lets you force day-first or month-first order when you know the source. When you need a value in a different shape rather than a verdict, the Date Format Converter is next door; for times rather than dates, use the Time Validator.