How to convert mixed date formats in excel to iso 8601 in one pass
- Step 1Open the Date Standardizer — Go to the Date Standardizer. It is a Pro-tier tool, so sign in with a Pro account or higher before running.
- Step 2Drop your workbook — Add one
.xlsxor.csvfile. Only the first sheet is processed. Files up to 50 MB / 100,000 rows are accepted on Pro. - Step 3Name the date columns (optional) — Type the date column headers into the comma-separated box, e.g.
created_at, dob, signup_date. Leave it blank to let auto-detection find date columns for you. - Step 4Pick the output format — Choose from the six-option dropdown. Leave it on
ISO 8601 (yyyy-MM-dd)unless a downstream system needs a regional layout. - Step 5Run and download — Click run. The tool rewrites every recognised date and produces
dates-standardized.xlsxwith a sheet calledStandardized. - Step 6Check the findings report — Open the report below the result.
failedCellslists each unparseable cell asRow N, column: "value"— fix those at source or in a follow-up pass.
The six output formats (this is the complete list)
These are the only output formats offered — a fixed dropdown, not a free-text format box. There is no custom date-fns token field. Pick the one your downstream system expects.
| Dropdown label | date-fns token | 29 Sep 2024 renders as | Best for |
|---|---|---|---|
| ISO 8601 (yyyy-MM-dd) | yyyy-MM-dd | 2024-09-29 | Databases, pandas, JSON, sorting — the safe default |
| UK (dd/MM/yyyy) | dd/MM/yyyy | 29/09/2024 | UK/EU human-facing reports |
| US (MM/dd/yyyy) | MM/dd/yyyy | 09/29/2024 | US human-facing reports |
| dd-MM-yyyy | dd-MM-yyyy | 29-09-2024 | Dash-separated UK/EU layout |
| MM-dd-yyyy | MM-dd-yyyy | 09-29-2024 | Dash-separated US layout |
| Long (January 1, 2024) | MMMM d, yyyy | September 29, 2024 | Letters, invoices, presentation copy |
What chrono-node does with common date strings
Behaviour verified by running the bundled chrono-node parser. The parser uses its default English settings — month-first for ambiguous slash dates — and there is no locale switch in this tool.
| Input cell value | Parses? | Result (to ISO 8601) | Note |
|---|---|---|---|
2024-09-29 | Yes | 2024-09-29 | Already ISO — passes through unchanged |
09/07/2024 | Yes | 2024-09-07 | Read as month-first (US): Sep 7, not 9 July |
13/07/2024 | Yes | 2024-07-13 | Day-first used only because 13 cannot be a month |
29 September 2024 | Yes | 2024-09-29 | Natural-language text date |
29-Sep-24 | Yes | 2024-09-29 | Two-digit year is expanded |
2024-09-29 14:30 | Yes | 2024-09-29 | Time is parsed then dropped by the date-only token |
next friday | Yes | (date relative to today) | Relative phrases resolve against the run date |
Q3 2024 | No | (left unchanged) | Listed in the findings report |
45899 (number as text) | No | (left unchanged) | A bare serial typed as text does not parse |
Tier limits for the Date Standardizer
The Date Standardizer is gated to Pro and above — a Free account cannot run it. Limits below are the real Excel-family numbers. One file is processed per run.
| Tier | Max file size | Max rows | Runs this tool? |
|---|---|---|---|
| Free | 5 MB | 10,000 | No — Pro required |
| Pro | 50 MB | 100,000 | Yes |
| Pro-media | 200 MB | 500,000 | Yes |
| Developer | 500 MB | Unlimited | Yes |
Cookbook
Real before/after rows. The left side is what a messy export looks like in one column; the right side is the same column after a run with the default ISO 8601 format.
Five formats collapsed into ISO 8601
The classic case: one column, five different human conventions. With output format on ISO 8601 (the default), every recognised date becomes yyyy-MM-dd.
Before (column: order_date) After (ISO 8601) ---------------------------- ---------------- 01/12/2024 2024-01-12 12 January 2024 2024-01-12 2024-01-12 2024-01-12 12-Jan-24 2024-01-12 1/12/24 2024-01-12
Auto-detect picks the date columns for you
Leave the columns box blank. The tool samples the first 20 non-empty rows of each column; any column where >=60% parse as dates is rewritten. Non-date columns are untouched.
Headers: id | full_name | signup_date | notes signup_date sample (20 rows): 18 parse as dates -> 90% -> DETECTED full_name sample: 0 parse -> 0% -> skipped notes sample: 2 parse (stray dates) -> 10% -> skipped findings.detectedColumns = ["signup_date"]
Naming columns explicitly
When you want tight control, type the exact headers. Only those columns are scanned, even if other columns also look like dates.
Columns box: created_at, closed_at Result: created_at and closed_at rewritten to ISO 8601. A third column "last_seen" that also holds dates is left untouched because it was not named.
Excel serial dates are decoded, not mangled
Cells that Excel already stores as real dates (serial numbers with a date format) are read as Date objects by SheetJS and reformatted directly — no chrono guessing involved.
Cell shows: 9/29/2024 (a true Excel date, serial 45564) SheetJS reads it as a Date object date-fns formats it -> 2024-09-29 changes_applied += 1
Unparseable values are reported, not deleted
Anything chrono can't turn into a date stays exactly as it was, and its location is recorded in the findings report so you can triage.
Before (column: ship_date) Q3 2024 TBD 2024-09-29 After Q3 2024 <- unchanged TBD <- unchanged 2024-09-29 <- already ISO, rewritten identically findings.failedCells: Row 2, ship_date: "Q3 2024" Row 3, ship_date: "TBD"
Edge cases and what actually happens
Cell value is empty or whitespace-only
PreservedBlank cells are skipped before parsing — the tool trims the value and continues if it is empty. No empty cell is ever flagged or rewritten.
Value is already ISO 8601
By design2024-09-29 re-parses and re-formats to the same 2024-09-29. Running the tool twice is safe and idempotent for the ISO format.
Ambiguous slash date like `09/07/2024`
Parsed (month-first)chrono's default English mode reads it as month-first, so this becomes September 7, not 9 July. There is no locale toggle. If your column is UK day-first, see the dedicated UK/US guide and verify with a spot check.
Value spelled as `Q3 2024` or `Spring 2024`
Failed parseQuarters and seasons are not dates chrono can resolve, so the cell is left unchanged and added to failedCells.
Excel serial number stored as plain text, e.g. `45899`
Failed parseA bare serial number that is text (not a true date cell) does not parse as a date and is reported. Convert it to a real date in Excel first, or it will be skipped.
Date string contains a time, e.g. `2024-09-29 14:30`
Time droppedchrono parses the time, but the six output formats are all date-only, so the time component is discarded in the output. There is no time-preserving format option.
Relative phrase like `next friday`
Resolves to todaychrono resolves relative phrases against the moment the tool runs, which is almost never what you want in stored data. These convert silently — review any column that might contain free text.
Output written as text, not a true Excel date
Known behaviourRewritten values are strings. ISO 8601 text still sorts chronologically, but the cells are not Excel serial dates, so DATEDIF/EDATE/NETWORKDAYS will not treat them as dates without a re-conversion step in Excel.
More than 50 cells fail to parse
Truncated listfailedCells is capped at the first 50 entries, but failedCount reports the true total so you know how many remain beyond the shown sample.
File over the tier size or row limit
RejectedFiles above your tier ceiling (50 MB / 100,000 rows on Pro) are rejected before processing. Upgrade or split the file.
Frequently asked questions
What output formats can I choose?
Exactly six, from a fixed dropdown: ISO 8601 (yyyy-MM-dd), UK (dd/MM/yyyy), US (MM/dd/yyyy), dd-MM-yyyy, MM-dd-yyyy, and Long (January 1, 2024). There is no custom-format text box — if you need a token that isn't on the list, the tool can't produce it.
Do I have to name the date columns?
No. Leave the columns box blank and the tool auto-detects: any column where at least 60% of the first 20 non-empty rows parse as a date is treated as a date column. Name columns only when you want to restrict the scan.
Are the dates written as real Excel dates?
No — they are written as text strings in the chosen format. ISO 8601 text sorts chronologically (lexical order equals date order), but the cells are not Excel serial dates. To use Excel's date math afterward, re-convert the column in Excel.
Does it handle Excel serial-number date cells?
Yes, when they are true date cells. SheetJS reads them as JavaScript Date objects and date-fns formats them directly — no parsing guesswork. A serial number stored as plain text, however, will not parse.
What happens to cells that aren't dates?
They are left exactly as they were and listed in the findings report (failedCells) with their row and column, so you can review them. Nothing is deleted.
Is my file uploaded anywhere?
No. Parsing, conversion and writing all happen in your browser with SheetJS and chrono-node. The workbook never leaves your machine.
How many rows can it process?
Up to 100,000 rows on Pro, 500,000 on Pro-media, and unlimited on Developer. The tool is Pro-gated, so a Free account can't run it.
Can it process several files at once?
This tool runs on one file per pass and outputs one .xlsx. For multiple files, run them in sequence.
Which sheet does it process?
Only the first sheet of the workbook. If your dates are on a later sheet, move or copy them to the first sheet before running.
Why did a value like `next month` get converted?
chrono resolves relative phrases against the run date, so free-text values that look like relative dates convert to whatever today implies, and two-digit years like 12-Jan-24 are expanded to 2024. Audit any column that mixes real dates with free text, and sanity-check the century on legacy data.
What should I do before importing into a database?
Use ISO 8601 output. If you want to confirm which columns hold text-stored dates first, run the Format Inspector, then standardize, then import.
Can I split the file by date after standardizing?
Yes — once the dates are uniform ISO 8601, the Conditional Splitter can split one workbook into separate files per column value (for example a year column), which is far cleaner once every date shares one format.
Privacy first
Every JAD Excel tool runs entirely in your browser using SheetJS and ExcelJS. Your spreadsheets, formulas, and data never leave your device — verified by zero outbound network requests during processing.