Страницы: 1
RSS
Расчет чистого времени между датами со временем
 
Привет, форумчане! Всех с наступающим!

Задача встала такая. Рассчитать время между двумя датами без учета выходных дней (СБ, ВС). Не чистое раб время, а именно просто время, десятичными числами.
Например, начальная дата 03.12.2022 10:00:00 конечная дата 06.12.2022  10:00:00. При вычитании двух дат получим 3,00. Десятичное число будет иметь дробную часть в зависимости от разницы времени вплоть до секунд. Соответственно, использовать функцию ЧИСТРАБДНИ.МЕЖД не получится. По крайней мере в ее простом применении.

Самое близкое, что я пока сам смог написать выглядит так, добавлены 2 столбца с днями неделями для упрощения:

=ЕСЛИ(И([@[День недели начальной даты ]]=5;[@[День недели конечной даты]]<>5);[@[конечная дата]-[@[начальная дата]]-2;ЕСЛИ(И([@[День недели начальной даты ]]=6;[@[День недели конечной даты]]<>6);[@[начальная дата ]]-[@[конечная дата]]-1;[@[конечная дата]]-[@[начальная дата]]))

Попытался вычесть не учитываемое время выходных из срока. Но формула с сильной неточностью.

1) не учитывается именно время начальной и конечных дат. Начальная дата может быть суббота 00:00, конечная понедельник 10.00, должно учесться только 10 ч времени, т.е. примерно 0.4 по десятичному числу. Моя формула примерно вернет 58ч - 24ч = 34ч, т.е примерно 1,5 по десятичному. К тому же совсем не учитывается если начальная дата воскресенье. Да и вполне может быть так, что начальная дата четверг или в принципе любой день нед кроме выходного, но чаще всего перевод на выходные идет именно если начальная дата пятница

2) Для задачи не особо принципиально, обычно конечная и начальная даты не превышают неделю по разности, но в редких случаях бывает, что промежуток может заходить, например на 4 выходных дня.  
Изменено: Сергей Жуков - 29.12.2022 10:50:57
 
Добрый день. И вас с наступающими праздниками. Нам файлик бы и в нём что есть и какую цифру надо получить
 
New, Прикрепляю, там все просто. почти все варианты пересечения с выходными днями отражаются в 4 вариантах. Возможно что-то упустил  
 
ну, раз вы не указали то число, которое надо получить, то давайте гадать... для 2-й строки в вашем файле ответ должен быть 48 ?
 
New, Нет, 34 часа или примерно 1,3 по десятичному, ответ должен быть в десятичном виде именно  
Изменено: Сергей Жуков - 29.12.2022 11:37:17
 
Цитата
Сергей Жуков написал:
34 часа или примерно 1,3 по десятичному  
А как Вы переводите?
Такой вариант
Код
=ЧИСТРАБДНИ(A2;B2)-ОСТАТ(A2;1)*(ДЕНЬНЕД(A2;2)<6)-(1-ОСТАТ(B2;1))*(ДЕНЬНЕД(B2;2)<6)
Изменено: _Boroda_ - 29.12.2022 11:41:22
Скажи мне, кудесник, любимец ба’гов...
 
Код
=B1-A1 - ЕСЛИ(ДЕНЬНЕД(A1;2)>5;8 - ДЕНЬНЕД(A1;2)-ОСТАТ(A1;1) -ЕСЛИ(ДЕНЬНЕД(B1;2)>5;ДЕНЬНЕД(B1;2)-6+ОСТАТ(B1;1);) 
для разницы меньше 7 дней
 
_Boroda_, Класс, спасибо! Скажите, а возможно будет вторым вариантом посчитать так же только рабочее время. Например, между 8.00 и 17.00? и чтобы десятичное число уже не отталкивалось от суток, а от рабочего дня в 9 часов?  
 
У меня вышло вот так

=ЕСЛИ(A2>B2;0;ЕСЛИ(ОТБР(B2)=ОТБР(A2);ЕСЛИ(ОСТАТ(A2;1)>=ОСТАТ(B2;1);0;МАКС(0;МИН(ОСТАТ(B2;1);17/24)-МАКС(ОСТАТ(A2;1);8/24)));МАКС(ЕСЛИ(ДЕНЬНЕД(A2;2)>5;0;МАКС(0;МИН(9/24;ОТБР(A2)+17/24-A2)));0)+ЕСЛИ(ДЕНЬНЕД(B2;2)>5;0;МАКС(0;МИН(9/24;B2-ОТБР(B2)-8/24))))+МАКС(ЧИСТРАБДНИ.МЕЖД(ОТБР(A2);ОТБР(B2);1)-2;0)*9)

Файл, для пояснения как оно так получилось.
Изменено: Wiss - 29.12.2022 13:49:11
Я не волшебник, я только учусь.
 
предвижу следующий вопрос, а можно еще обед учитывать с 12:00 до 13:00
и рабочий день 9 часов - это нарушение КЗоТ, нещадная эксплуатация трудящихся
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Да нет, обед - это уже перебор) 9 часов - это с обедом)  
 
начало и окончание периода может быть вне пределов рабочего времени:? (после 17:00, до 8:00 в выходные)
учитывать праздничные дни? (и где взять их список)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
На основе формулы _Boroda_ так вроде в часах должно быть, если учет  раб. времени только в интервале 8-17. А вот ежели раб время каждый день произвольное, тогда не знаю.
Код
 =9*ЧИСТРАБДНИ(A2;B2)-МИН(МАКС(24*ОСТАТ(A2;1)-8;0);9)*(ДЕНЬНЕД(A2;2)<6)-(9-МИН(МАКС(24*ОСТАТ(B2;1)-8;0);9))*(ДЕНЬНЕД(B2;2)<6)
 
Добрый день!
Подскажите можно рассчитать рабочие время с учетом графика работы и праздничных дней в PQ?

Благодарю за ответ!
 
Цитата
написал:
Добрый день!
Подскажите можно рассчитать рабочие время с учетом графика работы и праздничных дней в PQ?

Благодарю за ответ!
Попробуйте VBA
Изменено: Valera2 - 28.02.2023 22:09:06
 
Цитата
Tusi написал:
можно рассчитать рабочие время с учетом графика работы и праздничных дней в PQ?
Можно. Только не вижу Ваших вариантов.
Если нужно все сделать за Вас - то тут, скорее, в платный раздел :)
 
Всем огромное спасибо за обратную связь и помощь.
 
Добрый день!
Столкнулся с аналогичной задачей - рассчитать период в часах между двумя (Дата 1) и Дата 2) датами (с учетом рабочего времени с 9 до 18 и исключением выходных и праздничных дней)

Чуть изменил формулу из поста 9 в этой теме https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=154501&a... чтобы учитывались еще и праздничные дни

Но столкнулся с проблемой, что формула некорректно работает, если разница между датами составляет более 3-х дней (исходная формула тоже неверно работает, так что это не результат моих кривых рук), количество часов в результате просто в космос улетает, а также не учитываются праздничные дни...


Подскажите, где ошибка? В файле примеры с формулами

ремарка - если Дата2 выпадает на выходной/праздничный день, то часы этих дней не должны учитываться в результате, т.е. если Дата2 попадает на праздник, то учитываются только рабочие часы дней с Даты1 до Даты2
 
Цитата
Александр,  Подскажите, где ошибка?
ну, первое что сразу заметилось это умножение просто на 9 в конце, а не на 9/24
...дальше не разбирался)
вот что у меня получилось:
=МАКС(ЧИСТРАБДНИ(A4;B4;H$2)*9/24-МАКС(МИН(ОСТАТ(A4;1)-9/24;9/24);)*ЧИСТРАБДНИ(A4;A4;H$2)-МАКС(МИН(18/24-ОСТАТ(B4;1);9/24);)*ЧИСТРАБДНИ(B4;B4;H$2);)
 
Еще вариант:
=(NETWORKDAYS.INTL(A4;B4;1;$H$2)-1)*("18:00"-"09:00")+(NETWORKDAYS.INTL(B4;B4;1;$H$2)=1)*MEDIAN(MOD(B4;1);"09:00";"18:00")-MEDIAN(NETWORKDAYS.INTL(A4;A4;1;$H$2)*MOD(A4;1);"09:00";"18:00")+(NETWORKDAYS.INTL(B4;B4;1;$H$2)=0)*("18:00")
Изменено: memo - 07.04.2026 09:17:00 (Прикрепил файл)
 
ПавелW, memo,
Спасибо огромное! Оба варианта работают.
 
Добрый вечер. Еще пример для 2021+. Начало и окончание в любое время суток, в том числе и во время обеденного перерыва. Количество дней может быть любым. Учитываются праздники, перенесенные выходные, рабочие субботы и сокращенные предпраздничные дни.  
 
Старичок,
Благодарю! Забрал для изучения.
Крайне полезно!
Страницы: 1
Читают тему
Наверх