Даты Excel
Вместо даты в ячейке 45921? Или даты в двух книгах расходятся на четыре года? Здесь число читается обоими способами.
Работает в вашем браузере. Всё, что вы сюда вставляете или бросаете, никуда не загружается.
Дробная часть — время суток. Стрелки сдвигают на день, Shift+стрелки — на 30 дней.
В режиме «Авто» всё от 100 000 000 000 считается миллисекундами.
| система 1900Windows, Mac с 2011 | система 1904Mac 2008 и старше | |
|---|---|---|
| число | 45921 | 45921 |
| дата | вс, 21 сентября 2025 г. | сб, 22 сентября 2029 г. |
| время | 00:00:00 | 00:00:00 |
| ISO 8601 | 2025-09-21T00:00:00 | 2029-09-22T00:00:00 |
| Unix, секунды | 1758412800 | 1884729600 |
| Unix, мс | 1758412800000 | 1884729600000 |
| формула | =DATE(2025,9,21) | =DATE(2029,9,22) |
| C − B = 1462 дн. · 4 года + 1 день | ||
Одно число, две даты, между ними 1462 дня. Если даты прыгают на четыре года и день между книгой с Mac и книгой с Windows, вот почему.
Часовых поясов в Excel нет: ISO 8601 и Unix-время считают значение ячейки временем по UTC.
Числа становятся датами, даты — числами, а числа больше допустимого в Excel читаются как Unix-время. Строки, которые не удалось прочитать, копируются пустыми, чтобы колонка не съехала.
| # | Ввод | Результат | Как прочитано |
|---|
Как пользоваться
- Введите число из ячейки в режиме Число → дата. Дробная часть — это время суток:
45921.75— 21 сентября 2025, 18:00. - Смотрите обе колонки. B — система 1900 (Windows и Mac с 2011 года), C — старая маковская система 1904.
- Чтобы получить число из даты, выберите или введите её в режиме Дата → число. Для
03/04/2025укажите, что идёт первым: день или месяц. - Щёлкните по любой ячейке — её значение появится в строке
fx, оттуда его можно скопировать. - Целая колонка из CSV? Откройте Вставить колонку и скопируйте результат обратно одной колонкой или как TSV.
Что он делает
Excel хранит дату как количество дней от начала своей эпохи, а время — как долю дня. В системе 1900 по умолчанию 1 — это 1 января 1900, а 45921 — 21 сентября 2025. Превращает число в дату только формат ячейки, поэтому когда формат теряется (экспорт в CSV, импорт в базу, библиотека, которая игнорирует стили), вы видите голое число.
У системы 1900 есть знаменитый баг. Число 60 — это 29 февраля 1900, дня, которого не было: Lotus 1-2-3 считал 1900 год високосным, и Excel скопировал это нарочно. Поэтому Google Таблицы, pandas и почти любой код считают от 30 декабря 1899: их числа совпадают с Excel начиная с 1 марта 1900 и отстают на день до этой даты. Число 0 Excel честно показывает как «0 января 1900».
Система 1904 начинается с 0 = 1 января 1904. Её по умолчанию использовал Excel 2008 для Mac и более старые версии, и любую книгу до сих пор можно на неё переключить. Одно и то же число в 1904 даёт дату на 1462 дня позже, чем в 1900: четыре года и один день. Именно этот сдвиг появляется, когда даты переезжают между файлом с Mac и файлом с Windows. Как это укусило меня, я описал в посте про рассинхрон дат Excel и ошибку на единицу.
Часовых поясов в Excel нет, поэтому ISO 8601 и Unix-время здесь считают значение ячейки временем по UTC. Диапазон Excel заканчивается 31 декабря 9999: это 2958465 в системе 1900 и 2957003 в 1904. Всё, что дальше или меньше нуля, — ########.
Вопросы
Почему Excel показывает 45921 вместо даты?
Потому что у ячейки пропал формат даты, и вы видите хранимое число: 45921 день от начала эпохи, то есть 21 сентября 2025. Выделите колонку и поставьте формат «Дата» (Ctrl+1, на Mac ⌘+1). В CSV, кроме числа, ничего нет, так что переводите его здесь или в коде.
Почему даты сдвинулись на 4 года и 1 день?
Одна книга использует систему дат 1904, а другая — 1900, поэтому одно и то же число означает две даты с разницей в 1462 дня. Проверьте Файл → Параметры → Дополнительно → Использовать систему дат 1904 (на Mac: Excel → Настройки → Вычисление). Чтобы исправить скопированные значения, впишите 1462 в свободную ячейку, скопируйте её и примените к датам Специальная вставка → Сложить (из 1904 в 1900) или Вычесть (из 1900 в 1904).
Как перевести дату Excel в Python или JavaScript?
Считайте дни от 30 декабря 1899. В pandas: pd.to_datetime(df["date"], unit="D", origin="1899-12-30"). В JavaScript: new Date((serial - 25569) * 86400000) и читайте UTC-методами, ведь 25569 — это 1 января 1970. Оба способа верны для всего после 28 февраля 1900. Для книги в системе 1904 возьмите origin="1904-01-01" или сначала прибавьте 1462. Google Таблицы используют ту же эпоху 30 декабря 1899.
Как превратить Unix-время в дату Excel?
Разделите секунды на 86400 и прибавьте 25569: =A1/86400+25569, затем поставьте ячейке формат даты. Для миллисекунд делите на 86400000. Результат будет в UTC. Чтобы получить местное время, прибавьте смещение в часах, делённое на 24, например +3/24.
Как превратить текст, похожий на дату, в настоящую дату Excel?
Если значение прижато к левому краю ячейки и смена формата ничего не меняет, это текст. =ДАТАЗНАЧ(A1) (в английском Excel DATEVALUE) превращает его в число, после чего поставьте ячейке формат даты. ДАТАЗНАЧ читает текст в порядке дат вашей системы, поэтому 03/04/2025 в Европе — 3 апреля, а в США — 4 марта. Для целой колонки: Данные → Текст по столбцам, дважды «Далее», выберите Дата и порядок, в котором записан текст (например, ДМГ: день, месяц, год).