Как считать разницу между датами в Google Sheets с помощью DATEDIF

Что делает функция DATEDIF в Google Sheets
DATEDIF вычисляет разницу между двумя датами и возвращает результат в указанной единице: годах, месяцах или днях. Это удобный инструмент, когда вам нужно быстро узнать возраст, срок проекта или длительность между двумя событиями.
Определение в одну строку: DATEDIF(start_date, end_date, unit) — возвращает целое число разницы между датами в указанной единице.
Синтаксис:
=DATEDIF(start_date, end_date, "unit")Важно: DATEDIF предполагает, что start_date <= end_date. Если начальная дата позже конечной — функция выдаст ошибку.
Поддерживаемые unit (единицы):
| Unit | Что возвращает |
|---|---|
| Y | Количество целых лет между датами. |
| M | Количество целых месяцев между датами. |
| D | Количество дней между датами. |
| MD | Количество дней между датами после вычитания целых лет и месяцев. |
| YM | Количество целых месяцев между датами после вычитания целых лет. |
| YD | Количество дней между датами при условии, что даты считаются в пределах одного года (игнорируется разница в годах). |

Пример для понимания: у студента день рождения 7 февраля 2001 года. Какой возраст у него на 31 января 2022 года?
- Y → 20 (целых лет).
- M → 251 (целых месяцев).
- D → 7663 (дней между датами).
- MD → 24 (разница по дням после вычитания целых лет и месяцев; 31 − 7 = 24).
- YM → 11 (после вычитания целых лет, февраль на 11 месяцев дальше от января).
- YD → 358 (если игнорировать годы, разница между 7 февраля и 31 января равна 358 дням).
Быстрая проверка перед использованием
- Убедитесь, что ячейки содержат реальные значения даты, а не текст. Формат ячеек должен быть «Дата».
- start_date должен быть меньше или равен end_date.
- Помните про разные единицы — некоторые (MD, YM, YD) игнорируют года или месяцы и дают «остаточные» значения.
Пошаговое применение DATEDIF: практический пример

В этом примере у нас есть таблица с датами взлёта и посадки миссии Mars 2020:
- B2 = 30.07.2020 (взлёт)
- B3 = 18.02.2021 (посадка)
Перед вводом формулы: форматируйте ячейки как дата
- Выделите ячейки с датами.
- В меню выберите «Формат» → «Число» → «Дата».
После настройки формата можно считать дни и месяцы.
Пример: сколько дней длился перелёт?
=DATEDIF(B2, B3, "D")Результат: 569 (дней).
Сколько целых месяцев длился перелёт?
=DATEDIF(B2, B3, "M")Результат: 18 (целых месяцев).

Частые сценарии и готовые формулы
Ниже — набор задач, которые часто встречаются, и соответствующие формулы.
- Возраст в годах (полных лет) по дате рождения (A1):
=DATEDIF(A1, TODAY(), "Y")- Возраст в годах и месяцах (например, для резюме или отчёта):
=DATEDIF(A1, TODAY(), "Y") & " лет " & DATEDIF(A1, TODAY(), "YM") & " месяцев"- Полная длительность в месяцах между датами (A1 — начало, A2 — конец):
=DATEDIF(A1, A2, "M")- Дни между двумя датами (включая переходы через годы):
=DATEDIF(A1, A2, "D")- Остаток дней после вычитания лет и месяцев (полезно для формата «Y лет M месяцев D дней»):
=DATEDIF(A1, A2, "MD")- Формат «Y лет, M месяцев, D дней» (готовый шаблон):
=DATEDIF(A1, A2, "Y") & " лет, " & DATEDIF(A1, A2, "YM") & " месяцев, " & DATEDIF(A1, A2, "MD") & " дней"Пример с TODAY и расчёт до/после дня рождения

Задача: узнать, сколько дней прошло с последнего дня рождения и сколько осталось до следующего.
- В B1 хранится дата рождения Джона (например, 07.02.1990).
- В B2 вставляем текущую дату:
=TODAY()- Сколько дней прошло с последнего дня рождения (используем YD — игнорируем годы):
=DATEDIF(B1, B2, "YD")- Сколько дней осталось до следующего дня рождения (предположение: год = 365 дней; для учёта високосных годов используйте более точную логику):
=IF(DATEDIF(B1, B2, "YD")=0, 0, 365 - DATEDIF(B1, B2, "YD"))Примечание: использование 365 даёт простую оценку; если нужен точный расчёт с учётом високосных годов, примените вычисление ближайшей следующей даты рождения и вычтите TODAY().
Альтернативные функции и подходы
Когда DATEDIF хорош, а когда лучше использовать другое?
- DAYS(end, start) — возвращает разницу в днях как число (простая альтернатива для D).
- NETWORKDAYS(start, end, [holidays]) — считает рабочие дни между датами с учётом выходных и списка праздников.
- YEARFRAC(start, end, [basis]) — возвращает дробное число лет между датами (полезно для расчёта пропорций и процентов).
- EDATE(start, months) — добавляет указанное число месяцев к дате (удобно при генерации промежуточных дат).
Когда использовать альтернативы:
- Нужен нецелый результат в годах → YEARFRAC.
- Нужны рабочие дни → NETWORKDAYS.
- Хочется работать с датами как с числами → VALUE/DAYS.
Ограничения и подводные камни (когда DATEDIF даёт неправильное ожидание)
- Порядок дат: если start_date > end_date, функция вернёт ошибку.
- MD, YM, YD возвращают «остаточные» дни/месяцы и иногда вводят в заблуждение при визуальном подсчёте, особенно при высокосных годах. Всегда проверяйте интерпретацию этих единиц.
- DATEDIF может не учитывать конкретные правила переносов рабочих дней, часовые пояса и временные зоны — она работает с датами без временной компоненты.
Important: для точных расчётов с включением времени (часы/минуты) используйте разницу числовых значений даты/времени и форматы, а не DATEDIF.
Сравнение DATEDIF и других подходов — матрица совместимости
| Задача | DATEDIF | DAYS | NETWORKDAYS | YEARFRAC |
|---|---|---|---|---|
| Целые дни между датами | Да | Да (просто) | Нет | Нет |
| Целые месяцы/годы | Да | Нет | Нет | Частично (дробные годы) |
| Рабочие дни | Нет | Нет | Да | Нет |
| Дробные года (для начисления процентов) | Нет | Нет | Нет | Да |
Практическая методика: как выбрать формулу (мини-методология)
- Определите единицу результата: дни/месяцы/годы/рабочие дни.
- Решите, нужен ли целый результат или дробный.
- Учтите праздники/выходные и високосные годы.
- Выберите функцию: DATEDIF для целых лет/месяцев/остатков; DAYS для простых дней; NETWORKDAYS для рабочих дней; YEARFRAC для дробных лет.
- Напишите тесты на крайние случаи (см. раздел «Тесты/критерии приёмки»).
Decision flowchart (Mermaid)
flowchart TD
A[Нужна разница между датами?] --> B{Какая единица?}
B --> |Дни| C[Использовать DAYS или DATEDIF с 'D']
B --> |Рабочие дни| D[Использовать NETWORKDAYS]
B --> |Месяцы/годы 'целые'| E[Использовать DATEDIF с 'M' или 'Y']
B --> |Дробные годы| F[Использовать YEARFRAC]
C --> G{Нужны остатки месяцев/дней?}
G --> |Да| H[DATEDIF с 'MD' или 'YM']
G --> |Нет| I[Простая разница]Рольные чек-листы (что проверить перед публикацией отчёта)
Data Analyst:
- Формат даты в исходных ячейках — дата, не текст.
- Проверены крайние значения (start > end).
- Указаны праздники для NETWORKDAYS.
- Документирована логика округления.
Project Manager:
- Есть пояснение, что возвращают MD/YM/YD.
- Проверена миграция расчётов при смене временной зоны.
- Согласован формат представления (Y M D).
Разработчик/Автоматизация:
- Формулы работают при массовой обработке (нет ссылок на конкретные локальные ячейки).
- Обработаны ошибки (#NUM!, #VALUE!).
- Написаны тесты/сценарии регрессии.
Тесты и критерии приёмки
Тест: start_date = 2020-01-01, end_date = 2021-01-01
- Ожидается DATEDIF(…,”Y”) = 1
- Ожидается DATEDIF(…,”YD”) = 0
Тест: start_date = 2020-02-29, end_date = 2021-02-28 (високосный год)
- Проверьте поведение MD/YD; ожидается аккуратная обработка дней при переходе через 29 февраля
Тест: start_date > end_date
- Ожидается ошибка; чек-лист: либо контролировать порядок дат, либо применять: =IF(A1>A2, “Ошибка: дата начала позже даты окончания”, DATEDIF(…))
Тест для рабочий дней: используйте NETWORKDAYS с праздниками и проверьте совпадение с ручным перечнётом.
Критерии приёмки:
- Формулы выдают ожидаемые значения для базовых и граничных сценариев.
- Все входные даты проверены на формат.
- Документация присутствует в отчёте.
Шаблоны и сниппеты (cheat sheet)
Шаблон: возврат человекочитаемого интервала между A1 и A2
=DATEDIF(A1,A2,"Y") & " лет, " & DATEDIF(A1,A2,"YM") & " месяцев, " & DATEDIF(A1,A2,"MD") & " дней"Сниппет для обработки ошибки порядка дат:
=IF(A1>A2, "Ошибка: начальная дата позже конечной", DATEDIF(A1,A2,"D"))Шаблон для вычисления точной даты следующего дня рождения:
=DATE(YEAR(TODAY()) + (DATE(YEAR(TODAY()), MONTH(A1), DAY(A1)) < TODAY()), MONTH(A1), DAY(A1))И потом просто: =DATEDIF(TODAY(), <формуласледующегодня_рождения>, “D”)
Совместимость и переносимость
- Google Sheets: поддерживает DATEDIF с перечисленными unit.
- Microsoft Excel: также поддерживает DATEDIF, но в некоторых версиях функция считается «не документированной» в справке Excel — поведение схожее.
- При экспорте/импорте между платформами проверяйте форматы дат и локаль (например, день/месяц/год vs месяц/день/год).
Совет по локали: если у вашей таблицы нестандартная локаль, убедитесь, что даты парсятся корректно при импортe CSV.
Галерея краевых случаев
- Даты, включающие 29 февраля (високосный день) — проверяйте при расчётах «MD» и «YD».
- Разница в один день (например, 31 января → 1 февраля) — MD и YM могут выглядеть неожиданно.
- Большие интервалы (несколько десятилетий) — используйте комбинированный формат «Y лет M месяцев D дней».

Безопасность и приватность
Функции даты не отправляют данные на внешние сервисы — все вычисления происходят внутри таблицы. Тем не менее, при работе с персональными данными (даты рождения, сроки контрактов) соблюдайте внутренние политики хранения и доступа.
Краткое резюме
DATEDIF — надёжный инструмент для получения целых лет, месяцев и дней между датами в Google Sheets. Для рабочих дней, дробных лет или учёта праздников используются дополнительные функции: NETWORKDAYS, YEARFRAC, DAYS. Всегда проверяйте формат ячеек и порядок дат, и добавляйте обработку ошибок в автоматизированных отчётах.

Полезные формулы на заметку:
- Возраст (целые годы): =DATEDIF(A1, TODAY(), “Y”)
- Полная длительность: =DATEDIF(A1, A2, “Y”) & “ лет, “ & DATEDIF(A1, A2, “YM”) & “ месяцев”
- Рабочие дни: =NETWORKDAYS(A1, A2, HolidaysRange)
Important: перед массовым применением протестируйте формулы на граничных наборах данных.
Короткая подсказка для социальных сетей: освоив DATEDIF, вы легко считаете возраст, сроки и длительности в Google Sheets. Начните с шаблонов в разделе “Шаблоны и сниппеты”.
Похожие материалы
Как искать жильё на Airbnb для отпуска
Arduino Pong: ретро-игра на TV
Как подготовиться к идеальному Дню благодарения
Планирование групповой поездки с друзьями
DATEDIF в Google Sheets: считать разницу между датами