Подсчёт рабочего времени
Всем привет! Народ, подскажите где можно взять алгоритм расчёта рабочего времени для Google-script? Ну или на JS?
Нужно между двумя датами подсчитать количество рабочих часов. Рабочий день с 9:00 до 18:00 Обед с 13:00 до 14:00 с учетом того что СБ и ВСКР - выходные. Помогите пожалуйста. Есть функция, которая к дате добавляет несколько рабочих часов, и возвращает новую дату с временем, вот она: function getDeadlineDate(date, work) { var datework = 0; var hour = date.getHours(); var timehour = hour; var week = getWeekDay(date); for(;;) { if (work >= 8) { work -= 8; datework += 1; } else { break; } } if (week == 6) { timehour = 9; datework += 2; } else if (week == 7) { datework += 1; timehour = 9; } if((hour > 18) || (hour < 9)) { timehour = 9 + work } else { timehour += work; } if (hour < 13 && timehour >= 14 || timehour == 13) { timehour += 1; } if (week < 6 && ((week + datework) >= 7 || (week + datework == 6) )) { datework += 2; } if (timehour >= 18) { timehour = timehour - 18 + 9; datework += 1; } var datework = new Date(date.valueOf() + timehour*60*60*1000 + datework*24*60*60*1000 - hour*60*60*1000); return datework; } А вот как написать функцию, чтоб именно она вычисляла разницу (в рабочих часах) между 2-мя датами - не знаю пока, уже голову сломал. Например Первая дата: 30.01.2017 16:43 Вторая дата: 31.01.2017 11:45 Просто если разницу в часах считать, то это 19 часов и 3 минуты разница, но именно рабочих часов в них 4 часа 02 минуты. Функция должна вернуть: 4 часа 02 минуты, ну или 4,03 часа Помогите пожалуйста, кто может. |
Цитата:
Объяви сумму за решение проблемы, может и желающие найдутся... |
Переведите все точки отсчета времени в секунды, сделайте вычисления и будет вам счастье
|
Poznakomlus,
:blink: |
рони,
миллисекунды если об этом var vanDate = '30.01.2017 16:43', twoDate = '31.01.2017 11:45';// function dateStringToInt(str) { return Date.parse( str.replace(/^(\d+)\.(\d+)\.(\d+)\s(\d+):(\d+)$/, '$3-$2-$1T$4:$5:00.000Z') ) / 1000; } alert((dateStringToInt(twoDate) - dateStringToInt(vanDate)) / 3600 + ' часов прошло'); |
Poznakomlus, там не разность дат нужна... :D
Нужно количество "рабочего времени". Если известно расписание... Перерыв на обед и выходные... |
ksa,
все дошло, кол-во рабочих дней надо, при 8 ч рабочем дне |
Цитата:
|
Ну хотя бы если условиться что рабочие дни пн-пт с 9:00 до 18:00, обед с 13:00 до 14:00. Праздничные дни не учитываются, и переносы праздников тоже.
|
Ну тогда по логике:
Узнаем какой день недели выпадает на первую дату диапазона, и сколько дней в диапазоне. Если дата рабочая, из нее берем разницу от рабочих часов. А также можно узнать остаток времени до конца дня. Если дней в диапазоне меньше двух, берем такую же разность у второй даты диапазона, если это следующий день и рабочий. Если в диапазоне более дней, то плюсуем к полученному от первой даты 7 часов * на каждый полный рабочий день, что можно знать опираясь на день недели первой даты диапазона. А затем уже остаток от последней даты диапазона. |
Часовой пояс GMT +3, время: 20:08. |