Найти в Дзене

Как программно найти разность дат: 1С Программирование

Очень часто возникает задача найти разницу между датами. Найти дни или часы. Это можно сделать двумя способами. Если у вас две переменные с типом дата то это довольно просто. Вычитание между датами всегда выдаёт результат в секундах. Например так: При вычитании даты содержат время, результат также будет учитывать время. Например функция "ТекущаяДата()". Если вам нужна разница только в днях, используйте функцию "НачалоДня()" для обнуления времени. В запрос передаём две даты как параметры. И используем функцию запроса "РАЗНОСТЬДАТ(<Дата1>, <Дата2>, <Тип>)" Параметры функции: При вычитании дат функция отбрасывает все значения после значения для указанной периодичности. Например, при выбранной периодичности ДЕНЬ функция автоматически поместит обе даты в начало дня (если указать периодичность МЕСЯЦ - в начало месяца и т. д.). Возвращаемое значение - целое число. Совет: в сутках 24 часа. 24 часа умножить на 60 минут в часе равно 1440 минут в сутках. 1440 минут умножить на 60 секунд в минут
Оглавление

Очень часто возникает задача найти разницу между датами. Найти дни или часы.

Картинка от нейросети Шедеврум
Картинка от нейросети Шедеврум

Это можно сделать двумя способами.

1. Вычитание дат

Если у вас две переменные с типом дата то это довольно просто.

  • Вычитаете одну дату из другой, получаете разницу в секундах. Дальше делите на количество секунд в сутках и получаете количество дней.
  • РазницаДат = (БольшаяДата - МеньшаяДата) / 86400; // количество дней
Вычитание между датами всегда выдаёт результат в секундах.

  • Для определения минут или часов надо делить соответственно на 60 для минут и на 60*60 (3600) для часов.

Например так:

  • РазницаВЧасах = Окр((ТекущаяДата() - НачалоДня(ЛюбаяДата))/3600, 2); //разница в часах
При вычитании даты содержат время, результат также будет учитывать время. Например функция "ТекущаяДата()". Если вам нужна разница только в днях, используйте функцию "НачалоДня()" для обнуления времени.
Пример кода из внешней обработки
Пример кода из внешней обработки

2. Через запрос

В запрос передаём две даты как параметры. И используем функцию запроса

"РАЗНОСТЬДАТ(<Дата1>, <Дата2>, <Тип>)"

Параметры функции:

  • Дата1 - В качестве первого параметра передается выражение, значение которого необходимо вычесть из значения второго параметра (МеньшаяДата).
  • Дата2 - В качестве второго параметра функции передается выражение, из которого необходимо вычесть значение первого параметра (БольшаяДата).
  • Тип (периодичность) - тип периода, для которого вычисляется значение функции. Может принимать значения: СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, МЕСЯЦ, ГОД.
При вычитании дат функция отбрасывает все значения после значения для указанной периодичности. Например, при выбранной периодичности ДЕНЬ функция автоматически поместит обе даты в начало дня (если указать периодичность МЕСЯЦ - в начало месяца и т. д.).
Пример кода из внешней обработки
Пример кода из внешней обработки

Возвращаемое значение - целое число.

Совет: в сутках 24 часа. 24 часа умножить на 60 минут в часе равно 1440 минут в сутках. 1440 минут умножить на 60 секунд в минуте равно 86400. Просто запомните цифру 86400 секунд в сутках, она часто пригождается.

Если понравилось или было полезно, не забывайте ставить лайк!

3. Подробное видео

Показываю как это сделать во внешней обработке в управляемой форме.