Как рассчитать дату и время окончания работы?
Я знаю количество затраченного времени на работу, могу вывести дату и время окончания работы, но без учета рабочего времени...и выходных дней. К примеру работа будет совершаться 5 часов, часы работы с 8 до 16, работу начали в 14 часов, соответственно как мне рассчитать время чтобы показать что завершится она в 11 часов + 1 день
Пробовал через get Day и т.д. Одними проверочными if else не обойтись потому как нужно проверять как входные данные так и выходные Может кто знает как сделать часы в которых 8 часов в сутках?
t = new Date()
firstday = true
var rest = 5 //рест колво часов на выполнение задания
while (rest > 0){
if(t.getDay() == 0||6){ //проверяем на выходные
t.setDate(t.getDate()+ 1)} //пропускаем если выходной
else {
if(firstday){
starthour = t.getHours() //если начинаем с середины дня
firstday = false
}
else
starthour = 10 //начинаем с начала дня
ti = (19 - starthour)
if (rest > ti){
rest = rest - ti
t.setDate(t.getDate()+ 1)
}
else
return (t.getDate(), starthour + rest)
};
}
Ответы (1 шт):
С учётом праздников и переноса выходных надёжнее всего перебирать день за днём
пока остаток часов > 0:
if праздник, выходной:
проматываем день
else (рабочий день):
if первый день:
начало дня = старт работы
else:
начало дня = утро
t = (вечер - начало дня)
if осталось больше t:
отнимаем t часов, проматываем день
else:
возвращаем текуший день, начало дня + остаток часов
Попробую модифицировать то, что у Вас получилось:
t = new Date()
firstday = True
let rest = 5
while (rest > 0){
if(t.getDay() == 0||6){
t.setDate(t.getDate()+ 1)
}
else {
if(firstday){
starthour = t.getHours()
firstday = False
}
else
starthour = 10
ti = (19 - starthour)
if (rest > ti){
rest = rest - ti
t.setDate(t.getDate()+ 1)
}
else
return t.getDate(), starthour + rest
}
Рабочий код на Python.
def calcworkend(rest, startday, starthour, morning, evening):
day = startday
while rest > 0:
if (day + 1) % 7 < 2:
day += 1
else:
workstart = starthour if day == startday else morning
workstart = min(evening, max(workstart, morning))
hoursleft = evening - workstart
if rest > hoursleft:
rest -= hoursleft
day += 1
else:
return (day - startday, workstart + rest)
print(calcworkend(8, 1, 15, 10, 19))
(1, 14) # 4 часа в понедельник, 4 во вторник
print(calcworkend(8, 1, 3, 10, 19))
(0, 18) # рано озадачили, в понедельник управились
print(calcworkend(8, 1, 22, 10, 19))
(1, 18) # поздно озадачили, во вторник все делали
print(calcworkend(8, 5, 15, 10, 19))
(3, 14) # в пятницу начали, в понедельник закончили
print(calcworkend(8, 7, 15, 10, 19))
(1, 18) # в воскресенье озадачили, в понедельник поработали
print(calcworkend(32, 4, 18, 10, 19))
(6, 14) # в четверг начали большое дело, в среду закончили