Resources · Date Errors

The date problems that silently corrupt models.

Most date errors do not surface as #-prefixed errors. They appear as subtly wrong totals, mis-aligned month-end cuts, or working days off by one. This page enumerates the locale-driven date pitfalls we see most often, with practical detection heuristics for each.

1. The DD/MM versus MM/DD ambiguity

The same string — 03/04/2025 — is parsed as 3 April on a European locale and as 4 March on a US locale. When a CSV is imported into a workbook whose Windows region differs from the source, Excel applies the active locale's date template silently. Days 1–12 are accepted by either interpretation, so the mistake only becomes visible on day 13 of any month.

Detection heuristic

After importing a date column, run =SUMPRODUCT(--(DAY(A:A)>12)). Compare against the same formula on MONTH. If MONTH values are clustered at 1–12 (as they must be) but DAY never exceeds 12, your dates may be transposed.

Fix

Re-import via Data → From Text/CSV and specify the source locale explicitly in the wizard. Do not rely on Excel's auto-detect for date columns crossing locales.

2. The 1900 versus 1904 epoch

Excel for Windows defaults to the 1900 date system (serial 1 = 1 January 1900) while Excel for Mac historically defaulted to the 1904 system (serial 1 = 2 January 1904). A workbook saved under one system and opened under the other shifts every date by approximately 1,462 days — roughly four years.

The setting is found at File → Options → Advanced → Use 1904 date system. When workbooks created under different settings are linked, Excel does not reconcile the difference automatically.

Detection

Type =DATEVALUE("1900-01-01") in any cell. The result is 1 under the 1900 system and -1462 (rendered as ####### until formatted) under the 1904 system.

3. The 1900 leap-year bug

For backwards compatibility with the original Lotus 1-2-3, Excel treats 1900 as a leap year and recognises 29 February 1900 as a valid date. It is not. Any difference between two dates that crosses 1 March 1900 includes a phantom day. In modern finance work this never occurs in practice, but it does break interoperability with libraries that implement the calendar correctly — Apache POI, openpyxl in strict mode, Power Query in some configurations.

4. Two-digit-year interpretation

When a CSV contains 05/06/24, Excel applies a two-digit year cutoff (default: 1930–2029) and produces 2024. The cutoff is configurable in Windows regional settings, and different machines in your organisation may apply different cutoffs. This is the most under-recognised cause of off-by-a-century date drift in consolidations that pull from multiple sources.

Mitigation

Reject two-digit years at the import boundary. Coerce with =DATE(2000+RIGHT(A1,2), MONTH(...), DAY(...)) only if you are certain the source year is in the 2000s; otherwise demand four-digit years from the upstream system.

5. Dates stored as text

The most common diagnosis when SUMIFS with a date criterion silently returns zero: the date column is text. Visually identical, but Excel does not coerce text to date inside SUMIFS's criterion comparison.

Detection

A genuine date right-aligns by default. A date stored as text left-aligns. Or use =ISTEXT(A2) on the column.

Fix

Select the column → Data → Text to Columns → click through to step 3 → Date → pick the source format (DMY, MDY, YMD). This is the only built-in Excel command that lets you name the source format unambiguously.

6. Time-zone drift in Power Query

Power Query reads CSV timestamps as DateTime.Type in the local time zone unless you explicitly cast to DateTimeZone.Type. Workbooks shared across time zones can therefore show different month-end totals depending on who refreshes the query. Always promote to DateTimeZone at the source step and convert to UTC before any aggregation.

7. NETWORKDAYS with the wrong holiday list

The NETWORKDAYS family takes an optional holidays argument. A model authored for a US team and re-used by a German subsidiary will count US federal holidays as working days and ignore German Bank holidays unless the holiday range is replaced. Keep holiday lists per legal entity, not per workbook.

8. Locale-aware TEXT() formats

The format string passed to TEXT() is locale-dependent. TEXT(A1, "mmmm") returns "January" in English Excel and "Januar" in German Excel. If your model emits formatted dates for downstream concatenation, wrap with TEXT(A1, "[$-409]mmmm") to force English regardless of the user locale, or [$-407] for German.