// Вычисляет разницу между двух дат
// Параметры:
// Дата1 - дата - Дата первая
// Дата2 - дата - Дата вторая
// Точность - число - результат выполнения функции:
// 0 - лет, месяцев, дней, часов, минут, секунд
// 1 - месяцев, дней, часов, минут, секунд
// 2 - дней, часов, минут, секунд
// 3 - часов, минут, секунд
// 4 - минут, секунд
// 5 - секунд
//
// Возвращаемое значение:
// Структура:
// - Лет - Число - количество лет
// - Месяцев - Число - количество месяцев
// - Дней - Число - количество дней
// - Часов - Число - количество часов
// - Минут - Число - количество минут
// - Секунд - Число - количество секунд
//
Функция РазностьДатТиповой(Дата1, Дата2, Точность)
Результат = Новый Структура("Лет,Месяцев,Дней,Часов,Минут,Секунд", 0, 0, 0, 0, 0, 0);
ДатаНач = ?(Дата1 < Дата2, Дата1, Дата2);
ДатаКон = ?(Дата1 < Дата2, Дата2, Дата1);
// Секунды
Если Точность = 5 Тогда // До секунд
Результат.Секунд = ДатаКон - ДатаНач;
Иначе
Разница = Секунда(ДатаКон) - Секунда(ДатаНач);
Результат.Секунд = ?(Разница < 0, 60+Разница, Разница);
ДатаНач = ДатаНач + Результат.Секунд;
КонецЕсли;
// Минуты
Если Точность = 4 Тогда // До минут
Результат.Минут = (ДатаКон - ДатаНач) / 60;
ИначеЕсли Точность < 4 Тогда
Разница = Минута(ДатаКон) - Минута(ДатаНач);
Результат.Минут = ?(Разница < 0, 60+Разница, Разница);
ДатаНач = ДатаНач + Результат.Минут * 60;
КонецЕсли;
// Часы
Если Точность = 3 Тогда // До часов
Результат.Часов = (ДатаКон - ДатаНач) / 3600;
ИначеЕсли Точность < 3 Тогда
Разница = Час(ДатаКон) - Час(ДатаНач);
Результат.Часов = ?(Разница < 0, 24+Разница, Разница);
ДатаНач = ДатаНач + Результат.Часов * 3600;
КонецЕсли;
// Дни
Если Точность = 2 Тогда // До дней
Результат.Дней = (ДатаКон - ДатаНач) / 86400;
ИначеЕсли Точность < 2 Тогда
Разница = День(ДатаКон) - День(ДатаНач);
Результат.Дней = ?(Разница < 0, (ДатаКон - ДобавитьМесяц(ДатаКон,-1))/86400 + День(ДатаКон) - День(ДатаНач), Разница);
ДатаНач = ДатаНач + Результат.Дней * 86400;
КонецЕсли;
// Месяцы
Если Точность = 1 Тогда // До месяцев
Результат.Месяцев = Месяц(ДатаКон) - Месяц(ДатаНач) + (Год(ДатаКон) - Год(ДатаНач)) * 12;
ИначеЕсли Точность < 1 Тогда
Результат.Месяцев = (Месяц(ДатаКон) - Месяц(ДатаНач) + (Год(ДатаКон) - Год(ДатаНач)) * 12) %12;
ДатаНач = ДобавитьМесяц(ДатаНач, Результат.Месяцев);
КонецЕсли;
// Годы
Если Точность = 0 Тогда // До годов
Результат.Лет = Год(ДатаКон) - Год(ДатаНач);
КонецЕсли;
Возврат Результат;
КонецФункции // () |