Получить разницу в секундах, минутах, часах, днях, месяцах, годах (целое число). Получить разницу в количестве дней. Получить дату, сдвинутую на определенное количество единиц времени.
Разберем основные методы.
1. Вычитание дат для получения разницы в секундах, минутах, часах и т. д.
Для этого используется метод РазностьДат() глобального контекста.
Синтаксис: РазностьДат(<ДатаНачала>, <ДатаОкончания>, <ТипРазности>)
- <ДатаНачала>: Дата, от которой начинается отсчет. <ДатаОкончания>: Дата, до которой ведется отсчет. <ТипРазности>: Строковое значение, указывающее, в каких единицах вернуть разницу. Возможные значения:
- "Секунда" "Минута" "Час" "День" "Месяц" "Квартал" (начиная с 8.3.16) "Год"
Примеры:
Фрагмент кода
// Определим две даты для примера
Дата1 = '20240523090000'; // 23 мая 2024 года 09:00:00
Дата2 = '20250523153000'; // 23 мая 2025 года 15:30:00
// Разница в днях
РазницаВДнях = РазностьДат(Дата1, Дата2, "День");
Сообщить("Разница в днях: " + РазницаВДнях); // Выведет 365 (если без учета времени) или 366 (если с учетом неполного дня)
// Разница в месяцах
РазницаВМесяцах = РазностьДат(Дата1, Дата2, "Месяц");
Сообщить("Разница в месяцах: " + РазницаВМесяцах); // Выведет 12
// Разница в годах
РазницаВГодах = РазностьДат(Дата1, Дата2, "Год");
Сообщить("Разница в годах: " + РазницаВГодах); // Выведет 1
// Разница в часах
РазницаВЧасах = РазностьДат(Дата1, Дата2, "Час");
Сообщить("Разница в часах: " + РазницаВЧасах); // Выведет 8766 (365*24 + 6 часов 30 минут)
// Разница в секундах
РазницаВСекундах = РазностьДат(Дата1, Дата2, "Секунда");
Сообщить("Разница в секундах: " + РазницаВСекундах); // Выведет большое число секунд
Важные нюансы метода РазностьДат():
- Целые единицы: Метод возвращает Целое количество единиц. Например, если разница между 23.05.2024 09:00:00 и 23.05.2025 08:59:59 будет 0 лет, 11 месяцев, 30 дней. РазницаВГодах будет 0. Положительное/отрицательное значение: Если ДатаНачала больше ДатаОкончания, результат будет отрицательным.
2. Получение разницы в количестве дней (для вычисления полных дней)
Иногда нужно просто получить количество полных дней между двумя датами. Для этого можно просто вычесть одну дату из другой, если обе даты установлены в начало дня.
Фрагмент кода
ДатаНачала = '20240523000000'; // 23 мая 2024, начало дня
ДатаОкончания = '20250523000000'; // 23 мая 2025, начало дня
// Результат будет в секундах
РазницаВСекундах = ДатаОкончания - ДатаНачала;
// Для перевода в дни
КоличествоДней = РазницаВСекундах / (60 * 60 * 24);
Сообщить("Количество полных дней: " + КоличествоДней); // Выведет 366 (из-за 2024 високосного)
// Если нужно получить количество дней независимо от времени
Дата1БезВремени = НачалоДня(Дата1); // '20240523000000'
Дата2БезВремени = НачалоДня(Дата2); // '20250523000000'
КоличествоДнейТочно = (Дата2БезВремени - Дата1БезВремени) / (60 * 60 * 24);
Сообщить("Количество полных дней без учета времени: " + КоличествоДнейТочно);
3. Сдвиг даты на определенное количество единиц времени
Для получения новой даты, отстоящей от исходной на определенное количество единиц времени, используются методы:
- ДобавитьМесяц(<Дата>, <КоличествоМесяцев>) ДобавитьГод(<Дата>, <КоличествоЛет>) ДобавитьДень(<Дата>, <КоличествоДней>) ДобавитьЧас(<Дата>, <КоличествоЧасов>) ДобавитьМинуту(<Дата>, <КоличествоМинут>) ДобавитьСекунду(<Дата>, <КоличествоСекунд>)
Примеры:
Фрагмент кода
ИсходнаяДата = '20240523100000'; // 23 мая 2024 года 10:00:00
// Дата через 30 дней
ДатаЧерез30Дней = ДобавитьДень(ИсходнаяДата, 30);
Сообщить("Дата через 30 дней: " + ДатаЧерез30Дней);
// Дата через 2 месяца
ДатаЧерез2Месяца = ДобавитьМесяц(ИсходнаяДата, 2);
Сообщить("Дата через 2 месяца: " + ДатаЧерез2Месяца);
// Дата за 5 лет до
ДатаМинус5Лет = ДобавитьГод(ИсходнаяДата, -5);
Сообщить("Дата 5 лет назад: " + ДатаМинус5Лет);
Вычитание дат в запросах 1С
В языке запросов 1С также есть функции для работы с датами:
- РАЗНОСТЬДАТ(ДатаНачала, ДатаОкончания, ТипРазности): Аналогична одноименной функции на встроенном языке. ДОБАВИТЬКДАТЕ(Дата, ТипДаты, Число): Аналогична функциям Добавить… на встроенном языке.
Пример запроса:
Фрагмент кода
ВЫБРАТЬ
РеализацияТоваровУслуг. Ссылка,
РеализацияТоваровУслуг. Дата,
ДОБАВИТЬКДАТЕ(РеализацияТоваровУслуг. Дата, ДЕНЬ, 10) КАК ДатаОплатыЧерез10Дней,
РАЗНОСТЬДАТ(РеализацияТоваровУслуг. Дата, &ТекущаяДата, ДЕНЬ) КАК ДнейСДатыРеализации
ИЗ
Документ. РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
Используйте тот способ, который лучше всего соответствует вашей задаче по работе с датами в 1С.