Excel stores dates as serial numbers. The serial 1 is January 1, 1900, the serial 2 is January 2, 1900, and the serial 46042 is September 2, 2026. When you type a date into a cell formatted as a date, Excel keeps the serial internally and shows you the formatted date. When you export to CSV or read a spreadsheet with a library, you often get the serial back, and you have to convert it yourself.

An analyst in Mumbai pulls a vendor export and finds the delivery column is full of numbers like 45982 and 46011 instead of dates. Those are Excel serials. 45982 is July 4, 2026, and 46011 is August 2, 2026. Converting them is simple arithmetic once you know the epoch and the one bug that shifts everything by a day.

The 1900 date system

The default Excel date system counts days from January 1, 1900, which is serial 1. To convert a serial to a real date, add it to the epoch of December 31, 1899, so serial 1 lands on January 1, 1900. In code, that means taking December 31, 1899 at midnight and adding the serial number of days.

The complication is the 1900 leap-year bug. Excel treats 1900 as a leap year, but 1900 was not a leap year, because century years are only leap years if divisible by 400. Excel inherited this from Lotus 1-2-3 for compatibility, and it has never been fixed. The result is a phantom February 29, 1900 in the Excel calendar, which means every serial from March 1, 1900 onward is one higher than the true day count.

For any serial of 60 or higher (March 1, 1900 and later), subtract 1 before adding to the December 31, 1899 epoch to correct the 1900 leap-year bug. Serials 1 to 59 are unaffected because the phantom day has not happened yet.

Converting in code

In JavaScript, new Date(Date.UTC(1899, 11, 31) + serial * 86400000) gives the UTC date for a serial, but you must subtract one day for serials of 60 or higher to fix the 1900 bug. In Python, datetime(1899, 12, 30) + timedelta(days=serial - 1) does the same, with the same correction. Many spreadsheet libraries, like openpyxl and xlsx, handle the correction for you, so check the library docs before applying it twice.

A quick test for any converter is the serial 46042. If your code returns September 2, 2026, it is correct. If it returns September 3, 2026, you are missing the 1900-bug correction. If it returns December 31, 2026, you have the epoch wrong.

The 1904 Mac date system

Older Excel for Mac used a different epoch, January 1, 1904, as serial 0, because the original Mac OS used that epoch. A spreadsheet saved with the 1904 system has every serial 1462 lower than the 1900 system for the same date. If a date comes out as four years and one day in the future, the file is using the 1904 system and you need to subtract 1462. Modern Excel for Mac defaults to the 1900 system, so this is now rare, but legacy files in finance and research still surface it.

Time as a fractional serial

Excel stores time as the fractional part of the serial. Noon is 0.5, because it is half a day past midnight. 6:00 AM is 0.25, and 6:00 PM is 0.75. A full date-time like September 2, 2026 at 14:30 is 46042.6041667, the integer part for the date and the fraction for the time. When you convert, the integer part maps to the calendar date and the fraction maps to the time of day, multiplied by 24 hours.

A payroll analyst in Lagos sees the value 46042.5416667 in a timesheet export. The integer 46042 is September 2, 2026, and the fraction 0.5416667 times 24 is 13, so the time is 13:00, or 1:00 PM. The employee clocked in at 1:00 PM on September 2.

Common mistakes

Forgetting the 1900 leap-year correction. This is the single most common bug, and it shifts every modern date one day into the future. Always test with a known serial like 46042 before trusting a converter.

Mixing the 1900 and 1904 systems. If dates are off by exactly 1462 days, the file is using the 1904 Mac system. Check the workbook's date system property before converting.

Treating the serial as a Unix timestamp. They are different systems. The Excel serial counts days from 1899, while the Unix timestamp counts seconds from 1970. Dividing one by the other produces nonsense dates.

Related tools for date conversion

The Excel Date Converter reads a serial and returns the calendar date with the 1900-bug correction applied. The Julian Date Converter handles the separate Julian Day Number system used in astronomy. The Unix Timestamp converter handles epoch seconds. The Date Format Calculator converts between ISO 8601, US, and European date strings.

Frequently asked questions

How do I convert an Excel serial number to a date?

Add the serial to December 31, 1899 as the epoch, then subtract one day for any serial of 60 or higher to correct the 1900 leap-year bug. The serial 46042 converts to September 2, 2026. Most spreadsheet libraries apply the correction automatically.

What is the Excel serial date epoch?

January 1, 1900 is serial 1, which means the epoch is December 31, 1899. Adding the serial number of days to December 31, 1899 gives the calendar date.

Why is my Excel date conversion off by one day?

Because of the 1900 leap-year bug. Excel treats 1900 as a leap year even though it was not, so it includes a phantom February 29, 1900. Every serial from March 1, 1900 onward is one too high. Subtract one day for serials of 60 or above to fix it.

What is the 1904 date system in Excel?

An older Mac-only system that uses January 1, 1904 as serial 0. Dates stored this way are 1462 lower than the 1900 system for the same day. If your conversion is off by about four years and one day, the file is using the 1904 system.

How does Excel store time in a serial number?

As the fractional part of the serial. Noon is 0.5, 6:00 AM is 0.25, and 6:00 PM is 0.75. A full date-time is the integer date serial plus the fractional time, so September 2, 2026 at 13:00 is 46042.5416667.

Is an Excel serial number the same as a Unix timestamp?

No. An Excel serial counts days from December 31, 1899. A Unix timestamp counts seconds from January 1, 1970. They are different systems and cannot be converted by simple division.

What Excel serial is September 2, 2026?

46042. You can verify this by typing September 2, 2026 into an Excel cell, then changing the cell format to General, which reveals the underlying serial number.

Related tools

Excel Date ConverterJulian Date ConverterUnix Timestamp ConverterDate Format CalculatorDate Calculator