Главная страница » Как вычитать даты в 1с

Как вычитать даты в 1с

В 1С:Предприятии 8.3 вычитать (находить разницу между) даты можно несколькими способами, в зависимости от того, какой результат вам нужен:

Получить разницу в секундах, минутах, часах, днях, месяцах, годах (целое число). Получить разницу в количестве дней. Получить дату, сдвинутую на определенное количество единиц времени.

Разберем основные методы.

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С.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх