An Excel serial date / OADate value counts days from 1899-12-30, with a fractional day for time. Its source epoch and unit need to travel with it; the number alone cannot tell you which clock it belongs to.

Conversion rule

Unix milliseconds = (serial − 25569) × 86400000

The converter uses that relationship to return Unix seconds, epoch milliseconds, ISO 8601 UTC, and a readable UTC value. When investigating a log or export, keep the original value so you can check the conversion later.

Where mistakes happen

Excel serial dates are calendar values, not Unix timestamps. Pay special attention to the legacy 1900 leap-year compatibility quirk.

A safer workflow

  • Identify the platform and field name before doing arithmetic.
  • Preserve the original value as a string when it may exceed JavaScript safe-integer precision.
  • Convert once at the boundary, then store or compare a declared Unix unit.
  • Format in a named timezone only when presenting the resulting instant to a person.

Frequent questions:

Q: How do I convert an Excel serial date to a Unix timestamp?
A: Subtract 25,569 (the days between 1899-12-30 and 1970-01-01) and multiply by 86,400 to get Unix seconds.
Q: What is an OADate?
A: An OLE Automation Date is a floating-point day count from December 30, 1899, used by .NET (DateTime.ToOADate) and COM. It matches Excel serial dates for all modern dates.
Q: Why is the Excel offset 25569 and not 25568?
A: Excel's 1900 leap-year bug inserts a fake February 29, 1900, adding one day to the count for any date after that, which makes 25,569 the correct offset for modern dates.