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

О чём эта статья
Эта статья объясняет как работает DATEDIF в Google Sheets, какие единицы измерения она поддерживает, на какие подводные камни обратить внимание и какие альтернативные подходы использовать в сложных случаях. Включены простые и практические примеры, шаблоны формул, проверочные сценарии и чек‑лист для быстрого внедрения.
Что такое DATEDIF
DATEDIF — это функция Google Sheets, предназначенная для вычисления разницы между двумя датами. Она принимает начальную и конечную дату и возвращает числовую разницу в выбранной единице: годах, месяцах или днях. DATEDIF полезна когда нужно получить «полные» годы/месяцы между датами или выполнить гибкие подсчёты (например, дни после вычета полных лет и месяцев).
Определение в одной строке: DATEDIF(date1, date2, unit) — возвращает разницу между date1 и date2 в единице unit.
Синтаксис функции
=DATEDIF(date1, date2, unit)- date1 — начальная дата (меньшая дата).
- date2 — конечная дата (большая дата).
- unit — текстовая строка, задающая единицу результата.
Важно: оба аргумента должны быть значения́ми даты (тип Date), а не текстовыми строками, иначе результат будет ошибочным или #VALUE!.
Поддерживаемые единицы и что они означают
| Обозначение | Что возвращает |
|---|---|
| Y | Количество полных лет между датами |
| M | Количество полных месяцев между датами |
| D | Количество дней между датами |
| MD | Разница в днях при вычитании полных лет и полных месяцев |
| YM | Количество полных месяцев после вычитания полных лет |
| YD | Количество дней между датами, если считать даты в пределах одного года |
Пример объяснения: если date1 = 07.02.2001, date2 = 31.01.2022:
- Y => 20 (полных лет)
- M => 251 (полных месяцев)
- D => 7663 (дней)
- MD => 24 (разница в днях после вычета полных лет и месяцев: 7 и 31)
- YM => 11 (месяцев после вычета полных лет)
- YD => 358 (дней, если считать даты как «в одном году»)
Пошаговые примеры использования
Ниже приведены практические примеры, которые можно вставить в таблицу и протестировать.
Пример 1. Сколько дней и месяцев длился полёт Mars 2020
У нас есть две ячейки с датами:
- B2 = 30.07.2020 (взлёт)
- B3 = 18.02.2021 (посадка)
Перед вычислением убедитесь, что ячейки действительно имеют формат даты: выберите ячейки → Формат → Число → Дата.
Формула для дней:
=DATEDIF(B2, B3, "D")Формула для месяцев:
=DATEDIF(B2, B3, "M")В примере это возвращает 569 дней и 18 месяцев соответственно.
Пример 2. Сколько дней прошли с последнего дня рождения и сколько осталось до следующего
Имеем:
- B1 = дата рождения John Doe (например, 07.02.1990)
- B2 = =TODAY() — текущая дата
Формула, показывающая сколько дней прошло с последнего дня рождения:
=DATEDIF(B1, B2, "YD")Пояснение: “YD” игнорирует полные годы, поэтому возвращает разницу в днях между датой рождения и сегодняшней датой в пределах одного года (то есть сколько дней прошло с последнего дня рождения).
Чтобы получить сколько дней осталось до следующего дня рождения:
=IF(DATEDIF(B1, B2, "YD")=0, 0, 365 - DATEDIF(B1, B2, "YD"))Важно учесть високосные годы. Если нужна точность с учётом 29 февраля, лучше использовать следующий подход:
=DATE(YEAR(B2) + (DATE(YEAR(B2), MONTH(B1), DAY(B1)) < B2), MONTH(B1), DAY(B1)) - B2Эта формула вычисляет ближайшую будущую дату дня рождения и вычитает из неё сегодня, корректно обрабатывая переход через 29 февраля.
Альтернативы DATEDIF и когда их использовать
DATEDIF удобна, но не единственный инструмент. Рассмотрите альтернативы:
- DAYS(end, start) — возвращает количество дней между датами; проще и напрямую возвращает число дней.
- DAYS360(start, end, method) — корректирует расчёт на основе 360‑дневного финансового года; полезно в бухгалтерских вычислениях.
- YEARFRAC(start, end, basis) — возвращает дробное число лет между датами; удобно для вычисления возрастов с десятичной точностью или для финансовых расчётов.
- Формулы с DATE, YEAR, MONTH, DAY — дают максимальную гибкость при формировании «следующих дат», вычислении сроков и учете високосных годов.
Когда не использовать DATEDIF:
- Если нужны дробные года — используйте YEARFRAC.
- Для финансовых расчётов по 30/360 используйте DAYS360.
- Если требуется учёт часов/минут — используйте значения с датой/временем и функции типа TIMESTAMPDIFF (в приложениях) или вычитание дат/времён напрямую.
Типичные ошибки и как их исправить
- Ошибка #VALUE! — скорее всего аргументы не в формате даты. Решение: преобразовать в дату через DATEVALUE или привести формат ячеек.
- Неверный знак результата — в DATEDIF важно, что первая дата должна быть меньше второй. Иначе будет ошибка. Если порядок может меняться, оборачивайте в MIN/MAX или используйте условие:
=IF(A1<=A2, DATEDIF(A1, A2, "D"), DATEDIF(A2, A1, "D"))- Несоответствие ожиданию для “MD” и “YD” — эти единицы специально игнорируют целые годы или месяцы и могут выглядеть «странно». Всегда проверяйте результаты на граничных датах (высокосный год, разные дни месяце).
Обработка високосных годов и 29 февраля
DATEDIF корректно учитывает календарные даты при подсчётах дней и месяцев. Но при использовании формул типа 365 - X результат будет неточен для интервалов, если в промежутке есть 29 февраля. Чтобы корректно учесть високосный год при подсчёте дней до следующего дня рождения, используйте метод с вычислением ближайшей даты рождения (пример выше) или сравнение дат через функцию DATE и YEAR.
Шаблоны и «чек‑лист» для развертывания формул в таблице
Чек‑лист перед массовым применением DATEDIF:
- Убедиться, что все входные значения — тип Date.
- Проверить порядок дат (start <= end) или добавить защиту через IF.
- Выбрать единицу (Y, M, D, MD, YM, YD) согласно бизнес‑правилам.
- Протестировать формулы на крайних датах: 28/29 февраля, 31 января, переходы между годами.
- Документировать формат выходных значений (целые числа) и обработать исключения (пустые ячейки).
Шаблон «готовой» ячейки для подсчёта возраста в полных годах:
=IF(OR(ISBLANK(B1), ISBLANK(B2)), "", DATEDIF(B1, B2, "Y"))Шаблон для количества месяцев с округлением вниз:
=IF(OR(ISBLANK(B1), ISBLANK(B2)), "", DATEDIF(B1, B2, "M"))Критерии приёмки
- Формула корректно возвращает значения для выборки контрольных дат.
- Обработаны пустые и неверные типы входных данных без фатальных ошибок.
- Результат соответствует ожиданиям на граничных датах (високосный год, разные длины месяцев).
Модель принятия решения для выбора метода вычисления (Mermaid)
flowchart TD
A[Нужно сравнить даты?] --> B{Требуется дробный год?}
B -- Да --> C[Использовать YEARFRAC]
B -- Нет --> D{Нужны полные месяцы или годы?}
D -- Месяцы/Годы --> E[Использовать DATEDIF]
D -- Дни --> F[Использовать DAYS или DATEDIF с 'D']
E --> G{Учёт финансовых правил?}
G -- Да --> H[Использовать DAYS360]
G -- Нет --> I[DATEDIF подойдёт]Когда DATEDIF даёт неожиданные результаты
- MD и YM иногда выглядят неконсистентно: они рассчитывают остаток после вычета полных лет или месяцев. Это не «остаточные дни в общем смысле», а именно арифметический остаток по календарю.
- Если даты хранятся как текст (например, “2020-07-30” как текст), DATEDIF вернёт ошибку. Используйте DATEVALUE или преобразуйте формат.
- DATEDIF в локализованных версиях Google Sheets ведёт себя как в англоязычной документации, но названия функций в UI могут быть локализованы. Всегда проверяйте локальную справку, если работаете в иной языковой версии интерфейса.
Мини‑методология тестирования формул
- Создайте таблицу с контрольными парами дат: одна для обычных случаев, одна для високосного промежутка, одна для смены длины месяца (31 → 30) и одна с обратным порядком дат.
- Примените формулы DATEDIF, DAYS, YEARFRAC.
- Сравните результаты с ручными расчётами или эталоном (например, официальными календарями).
- Примите решение о добавлении проверки порядка дат и обработке пустых ячеек.
Быстрая шпаргалка по формулам
- Разница в днях: =DATEDIF(A1, B1, “D”) или =DAYS(B1, A1)
- Разница в полных месяцах: =DATEDIF(A1, B1, “M”)
- Разница в полных годах: =DATEDIF(A1, B1, “Y”)
- Дней после вычета лет и месяцев: =DATEDIF(A1, B1, “MD”)
- Месяцы после вычета лет: =DATEDIF(A1, B1, “YM”)
- Дни внутри года: =DATEDIF(A1, B1, “YD”)
Примеры тестов и приёмочные критерии
Тест 1: A1=28.02.2019, B1=01.03.2020 Ожидается: DATEDIF(A1, B1, “Y”) = 1; DATEDIF(A1, B1, “D”) = 367 (с учётом високосного года)
Тест 2: A1=29.02.2016, B1=28.02.2017 Ожидается: DATEDIF(A1, B1, “Y”) = 0; корректное поведение при использовании вычисления следующего дня рождения.
Тест 3: A1 и B1 в обратном порядке Ожидается: добавление IF или ABS для корректного результата или обработка ошибки.
Риски и рекомендации
- Риск ошибки из‑за строковых дат. Рекомендуется обеспечить валидацию входных данных и унифицировать формат хранения дат (тип Date).
- Риск неконсистентного восприятия единиц MD/YM/YD другими пользователями. Добавьте поясняющие комментарии в шапку таблицы.
Короткая шпаргалка для команд и ролей
- Аналитик: использовать DATEDIF для отчётов с требованием «полных» лет/месяцев.
- Бухгалтер: проверять требования 30/360 и использовать DAYS360 там, где это принято.
- Продукт‑менеджер: при отображении пользователю добавлять пояснение формата (например, “18 месяцев” vs “1,5 года”).
Краткое резюме
DATEDIF — лёгкий и быстрый инструмент для большинства задач по сравнению дат в Google Sheets. Он даёт целые годы, месяцы и дни, а также остатки после вычета лет или месяцев. Для специфичных нужд (дробные годы, финансовые расчёты, высокоточные обороты вокруг 29 февраля) используйте YEARFRAC, DAYS360 или ручные вычисления через DATE, YEAR, MONTH и DAY.
Важно: перед массовым внедрением проверяйте поведение формул на граничных датах и документируйте возможные исключения.
Словарь в одну строку
- DATEDIF — функция для вычисления разницы между двумя датами в Google Sheets.
- YEARFRAC — функция для получения дробного количества лет между датами.
- DAYS360 — функция для расчёта по финансовой модели 30/360.
Похожие материалы
Определить модель AirPods по номеру
Как выбрать удалённый хост для Minecraft
AirPlay на Roku: как включить и использовать
Умный гараж: что установить в первую очередь
Запуск Android на Mac