![]() |
Посчитать время с учётом рабочих часов
Вложений: 1
Всем привет!
Стоит задача посчитать сколько было затрачено времени в текущей задаче. В целом всё просто, использовал командлет Timespan, взял время старта, время конца, сложил и получил ответ: Код:
$FIRST_RESPONSE_TIME = New-TimeSpan -Start "$START_TIME_TICKET" -End "$END_TIME_TICKET" Однако, есть нюанс, который заключается в SLA. Время останавливается на нерабочих часах. То есть должно на 19:00 время остановиться и в 9:00 следующего дня утром снова возобновиться. По итогу вывод должен быть не на 2 часа 17 минут, а просто на 1 час 32 минуты. Следовательно, если время будет начинаться, скажем с 20:00 часов, то считать он должен с 9:00 и до времени, когда будет $END_TIME_TICKET (например конечная дата 12:00 и того 3 часа итог, а не 16 часов, как он посчитается всё время). И вот как посчитать время с учётом рабочих часов, вообще никаких идей нет, может у кого будут мысли как это сделать. Заранее спасибо!!! p.s. а и да, ещё нужно как-то учесть производственный календарь... в общем время должно считать строго в пороге от 9:00 до 19:00 буднего дня, а оставшееся выкидывать |
Для будних дней:
Код:
$k = new-timespan -h 14 Цитата:
|
Цитата:
а если время будет начинаться с 7:00 утра, он ведь всё равно посчитает его с 7:00, а не с 9:00 как должен(( p.s. причём вот, есть живой пример сейчас: время начинается с 16:37, а заканчивается на следующий день в 19:37. Считает 13 часов, так как отнимает 14 часов, НО, 37 минут же идут вне рабочего временни, значит должно быть 12 часов 23 минуты. И вот как сделать, чтобы он когда достигал 19:00 понимал, что это уже стоп... :( |
Цитата:
Пример для одного дня, без перехода на новую дату: Код:
$start = new-timespan -h 9 В общем, остальные возможные комбинации, предлагаю обдумывать самостоятельно... |
Вложений: 1
Njem,
В общем, накидал тут пример реализации логики для будней: script.ps1
Код:
param ( Пример запуска: Код:
.\script.ps1 -stime $(get-date("21.12.2022 19:50")) -etime $(get-date("22.12.2022 17:00")) Файл 167728 Выходные и праздники не учитываются... попробуйте их реализовать, отталкиваясь от логики будней... |
Цитата:
а я тут сижу второй день пытаясь математически всё это рассчитать) пока что логика тяжело даётся) думаю с этим намного проще будет!) Цитата:
сейчас всё посмотрю, спасибо ещё раз!!!) работа с числами всегда тяжело даётся для меня :( |
Цитата:
Код:
($x -gt 0 -and $x -lt 7) -and ($sdw -gt $edw) -and ($sdw -in $w) -and ($edw -in $w) А вот для праздников, возможно, придется использовать какой-либо список, тот же csv, либо прямо в скрипте его организовать... |
Цитата:
Цитата:
|
Njem, небольшая поправка
неправильно был указан номер воскресенья... должен был быть 0, т.е. 6 - суббота, 0 - воскресенье в скрипте исправил... |
Ещё вариант, в котором поправлены ошибки и добавлен учет выходных:
script.ps1
Код:
# Пример работы со временем. Учет времени только в рабочее время (9:00 - 19:00), |
Ну и всё упрощает работа с производственным календарем... единственный минус - необходимо следить за наличием и содержанием самих календарей, собственно.
script_calendar.ps1
Код:
# Пример работы со временем. Учет времени только в рабочее время (например 9:00 - 19:00), |
Цитата:
помотрю, проверю господи, ты просто бомба!) |
Время: 03:38. |
Время: 03:38.
© OSzone.net 2001-