Разработка и Конфигурация · 9 мин
Как добавить время к дате в 1С
Как добавить время к дате в 1С: сложение даты и числа, функция ДобавитьКДате, часы, минуты, секунды. Примеры кода, ошибки и проверка результата.
В 1С дата хранится вместе со временем — с точностью до секунды. Даже если вы видите в поле документа только «12.03.2026», внутри платформы это значение вида «12.03.2026 0:00:00». Поэтому задача «добавить время к дате» на практике означает одно из двух: либо прибавить к существующей дате часы, минуты или секунды, либо сформировать новое значение даты-времени из отдельных компонентов.
Для этого не нужны внешние обработки: встроенный язык 1С умеет складывать дату с числом, а штатные функции Дата() и ДобавитьКДате() позволяют собрать или сместить значение без ручных вычислений. Главное — понимать, в каких единицах платформа считает время, иначе легко получить сдвиг на несколько дней вместо пары часов.
Ниже разобраны все рабочие способы: от простого сложения до функции добавления месяцев, с примерами кода, проверкой результата и типичными ошибками, которые приводят к неверным датам в документах и отчётах.
Как 1С хранит дату и время
Тип «Дата» в 1С всегда содержит и календарную дату, и время суток. Разделить их нельзя — можно только отобразить часть значения через форматную строку, например Формат(МояДата, "ДЛФ=D") покажет только дату. Внутри значение останется полным, с часами, минутами и секундами.
Ключевой факт для вычислений: единица измерения при арифметике с датами — секунда. Выражение Дата1 - Дата2 возвращает число секунд между значениями, а Дата + Число сдвигает дату на указанное количество секунд вперёд. Никаких «дней» или «часов» в операторе сложения не предусмотрено.
Прибавление секунд, минут и часов оператором сложения
Самый прямой способ добавить время — прибавить к дате нужное количество секунд. Платформа сама корректно перенесёт значение через границы суток, месяца и года.
ИсходнаяДата = Дата(2026, 3, 12, 10, 0, 0);
НоваяДата = ИсходнаяДата + 45; // +45 секунд → 12.03.2026 10:00:45
НоваяДата = ИсходнаяДата + 15 * 60; // +15 минут → 12.03.2026 10:15:00
НоваяДата = ИсходнаяДата + 3 * 3600; // +3 часа → 12.03.2026 13:00:00
НоваяДата = ИсходнаяДата + 86400; // +1 сутки → 13.03.2026 10:00:00
Для удобства заведите переменные-множители: СекундВМинуте = 60, СекундВЧасе = 3600, СекундВСутках = 86400. Тогда выражение ДатаДокумента + 2 * СекундВЧасе читается однозначно и не требует комментариев при сопровождении кода.
Вычитание работает симметрично: Дата - 30 * 60 вернёт время на полчаса раньше. Это удобно для расчёта дедлайнов, например «за час до начала события».
Функция ДобавитьКДате: смещение на дни, месяцы и годы
Сложение секунд неудобно, когда нужно сместить дату на календарный период: месяц, квартал или год. Месяцы имеют разную длину, и вычислять их в секундах — прямой путь к ошибке. Для этого существует функция ДобавитьКДате(Дата, ТипИнтервала, Количество).
НоваяДата = ДобавитьКДате(ИсходнаяДата, "Месяц", 1); // +1 месяц
НоваяДата = ДобавитьКДате(ИсходнаяДата, "День", 10); // +10 дней
НоваяДата = ДобавитьКДате(ИсходнаяДата, "Час", -2); // -2 часа
НоваяДата = ДобавитьКДате(ИсходнаяДата, "Минута", 30); // +30 минут
НоваяДата = ДобавитьКДате(ИсходнаяДата, "Квартал", 1); // +1 квартал
Параметр «ТипИнтервала» принимает значения: Секунда, Минута, Час, День, Неделя, Месяц, Квартал, Полугодие, Год. Количество может быть отрицательным — тогда дата смещается назад. Функция корректно обрабатывает переход через конец месяца: прибавление месяца к 31 января даст последний день февраля, а не несуществующее 31 февраля.
Сложение или ДобавитьКДате
Подходит для точных смещений в пределах суток: часы, минуты, секунды. Просто и наглядно, но для месяцев и лет неприменимо.
Подходит для календарных периодов: дни, недели, месяцы, кварталы, годы. Корректно работает с разной длиной месяцев, но чуть многословнее.
Сборка даты со временем из отдельных компонентов
Если у вас есть дата без времени и отдельно часы с минутами (например, из двух полей формы), соберите новое значение функцией Дата() с шестью параметрами: год, месяц, день, час, минута, секунда.
ДатаБезВремени = НачалоДня(ДатаДокумента);
НоваяДата = Дата(Год(ДатаБезВремени), Месяц(ДатаБезВремени), День(ДатаБезВремени), 14, 30, 0);
// Результат: тот же день, но 14:30:00
Альтернатива без сборки по компонентам — прибавить секунды к началу дня: НачалоДня(ДатаДокумента) + 14 3600 + 30 60. Оба подхода дают одинаковый результат, выбирайте тот, который понятнее в контексте вашего кода.
Обратная задача — отбросить время — решается функцией НачалоДня(Дата). Она возвращает ту же дату с нулевым временем, что важно при сравнении дат в запросах и условиях: две даты одного дня с разным временем не равны друг другу.
- 1Определите, что нужно: сместить время (часы/минуты) или календарный период (дни/месяцы).
- 2Проверьте исходную дату на заполненность через ЗначениеЗаполнено().
- 3Для часов и минут прибавьте секунды: Дата + Часы <em> 3600 + Минуты </em> 60.
- 4Для дней, месяцев и лет используйте ДобавитьКДате() с нужным типом интервала.
- 5Проверьте результат через Сообщить() или отладчик, выведя полный формат даты со временем.
Работа с датой и временем в запросах
В языке запросов 1С арифметика с датами ограничена: складывать дату с числом напрямую нельзя. Для смещения используется функция ДОБАВИТЬКДАТЕ(Дата, ТипИнтервала, Количество) — синтаксис аналогичен встроенному языку.
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(Заказ.Дата, ЧАС, 3) КАК СрокОтгрузки
ИЗ
Документ.ЗаказПокупателя КАК Заказ
Для сравнения дат без учёта времени в запросе применяйте НАЧАЛОПЕРИОДА(Дата, ДЕНЬ) и КОНЕЦПЕРИОДА(Дата, ДЕНЬ). Это стандартный приём для отборов «за день»: условие Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата, ДЕНЬ) захватывает все документы суток независимо от времени.
Типичные ошибки и как их проверить
Самая частая ошибка — прибавление часов как будто это дни или наоборот. Выражение Дата + 2 добавляет две секунды, а не два дня; для двух дней нужно Дата + 2 86400 или ДобавитьКДате(Дата, "День", 2). Обратная ошибка — Дата + 2 60 60 24 * 30 для «месяца» — даёт смещение на 30 суток, что не совпадает с календарным месяцем.
Вторая группа проблем связана с отображением: разработчик прибавляет время, но в поле формы его не видно, потому что у элемента задан формат только даты. Проверяйте значение через отладчик или Сообщить(Формат(Дата, "ДЛФ=DT")), а не по внешнему виду поля.
Как проверить результат
Дата и время соответствуют ожидаемому смещению
Время 0:00:00 или смещение в других единицах
23:00 + 2 часа даёт 1:00 следующего дня
Дата не изменилась или день сброшен
31.01 + 1 месяц даёт последний день февраля
Несуществующая дата или сдвиг на март
FAQ
Что важно запомнить
Время в 1С добавляется секундами: Дата + Часы * 3600. Календарные периоды смещайте функцией ДобавитьКДате(), дату из компонентов собирайте функцией Дата(), а время обнуляйте через НачалоДня(). Всегда проверяйте результат в полном формате даты.
Как добавить к дате 1 час в 1С?
Прибавьте 3600 секунд: НоваяДата = ИсходнаяДата + 3600 или используйте ДобавитьКДате(ИсходнаяДата, "Час", 1). Оба варианта корректно переносят значение через границу суток.
Как прибавить к дате несколько дней?
Используйте ДобавитьКДате(Дата, "День", 7) для семи дней. Можно и через секунды — Дата + 7 * 86400, — но вариант с функцией читается понятнее и исключает ошибку в пересчёте.
Как убрать время из даты в 1С?
Полностью убрать время нельзя — тип «Дата» всегда его содержит. Функция НачалоДня(Дата) обнуляет время до 0:00:00, а для отображения только даты используйте Формат(Дата, "ДЛФ=D").
Как получить текущее время без даты?
Отдельного типа «время» в 1С нет. Можно вычислить количество секунд с начала дня: ТекущаяДата() - НачалоДня(ТекущаяДата()) — или отформатировать дату строкой Формат(ТекущаяДата(), "ДФ=ЧЧ:мм:сс").
Почему ДобавитьКДате с месяцем даёт неожиданный результат?
Функция корректно обрабатывает разную длину месяцев: прибавление месяца к 31 января даёт последний день февраля. Если нужен строго «тот же номер дня», логику придётся реализовывать вручную с проверкой числа дней в целевом месяце.
Можно ли складывать даты в запросе 1С?
Напрямую сложить дату с числом в запросе нельзя. Используйте функцию запроса ДОБАВИТЬКДАТЕ(Дата, ЧАС, 3) с типами интервалов СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, МЕСЯЦ и другими.