Spreadsheets and exports often mix date formats in the same column — 12/03/2024 next to 2024-03-12 next to 3 Apr 2024. That breaks sorting, imports, and analysis. This CSV date normalizer detects the date columns and rewrites every value to clean ISO 8601 (YYYY-MM-DD), entirely in your browser.
How it works
- Parse the CSV with a small parser that respects quoted fields and embedded commas.
- Classify columns. Each column is scanned; if most of its non-empty cells parse as dates, it is treated as a date column. Non-date columns are passed through untouched.
- Resolve day-month order. The hardest part of date cleaning is telling
DD/MMfromMM/DD. The tool uses unambiguous cells — any value with a part greater than 12, like25/03/2024— to vote on the column’s true order, then applies that decision to the ambiguous cells. - Rewrite to ISO 8601. Every recognised date becomes
YYYY-MM-DD, validated against real month lengths and leap years so impossible dates are rejected.
Why mixed date formats are so common
The slash-delimited date 03/04/2024 is read as 3 April in the UK and most of Europe, but as 4 March in the United States. When a dataset is assembled from contributors in different countries — or when a spreadsheet is opened in different locales — Excel and Google Sheets silently interpret the same string according to the system locale, then re-save it in whatever format the local setting dictates. After a few such round-trips a single date column can contain ISO, US, European, and textual formats simultaneously.
The only reliable fix is to normalise everything to ISO 8601, which sorts lexicographically, is locale-independent, and is accepted by every database and import tool without ambiguity.
Supported input formats
| Format | Example |
|---|---|
| ISO 8601 | 2024-03-25 |
| European slash | 25/03/2024 |
| US slash | 03/25/2024 |
| Dotted European | 25.03.2024 |
| Short textual month | 3 Apr 2024 |
| Long textual month | March 25, 2024 |
| Two-digit year | 25/03/24 (treated as 20XX if ambiguous century) |
Two-digit years are a known ambiguity. The tool interprets 00–49 as 2000–2049
and 50–99 as 1950–1999, which matches the convention used by most spreadsheet
applications. If your data spans a wider range, review the flagged rows manually.
What flagged rows mean
Every cell the tool cannot classify unambiguously is marked with a ⚠ warning
in the output. There are three reasons a cell gets flagged:
- Ambiguous order and no majority signal — both day and month parts are ≤ 12, and the column’s other rows are split evenly between DD/MM and MM/DD evidence.
- Impossible date — the parsed values would require a day or month that does not exist (for example, month 13 or 31 February).
- Unrecognised format — the cell does not match any supported pattern at all.
Flagged cells are left exactly as they were; the tool never silently commits a wrong date, because a silent wrong date is worse than a missing one.
Tips and notes
- Cells that stay ambiguous (both parts ≤ 12 with no majority signal) and cells that cannot be parsed are marked with a
⚠so you can review them — nothing is silently guessed wrong. - Supported inputs include
YYYY-MM-DD,DD/MM/YYYY,MM/DD/YYYY, dottedDD.MM.YYYY, and textual months like3 Apr 2024orApril 3, 2024. - Leap years are handled correctly, so
29/02/2024is accepted but29/02/2023is flagged as invalid. - The whole process is local, making it safe for customer lists, invoices, and other confidential CSVs.