Посчитать кол-во рабочих часов

Тема в разделе "Delphi - Система", создана пользователем Snickbw, 7 янв 2007.

Статус темы:
Закрыта.
  1. Snickbw

    Snickbw Гость

    Кто нибудь сталкивался с такой проблемой?

    Задан рабочий день: 08:00-17:00 ежедневно
    Устройство принято в ремонт : 14:30 date1
    Устройство выдано из ремонта : 09:45 date5

    Вопрос: как посчитать количество РАБОЧИХ часов:минут которые устройство находилось в ремонте?

    Задача тривиальная и довольно распространенная, но у меня получился код листа на два. При этом если еще ввести выходные, обеденный перерыв, то код еще увеличивается в разы.
    Я через цикл сделал, вот только если период большой, а шаг делать например в 5 минут, то цикл на месяц содержит около 10000 оборотов, кроме того внутри цикла вычисление дня недели для каждых 5 минут, выборка рабочего периода этого дня недели, сравнение на попадание текущего времени в рабочий период. В общем подвисает прилично машина.
    Возможно есть более оригинальное решение.
     
  2. Barmutik

    Barmutik Гость

    Утверждать конечно не буду что вариант архиверный .. но так вот сходу если без учёта обеда и выходных(которые не сложно добавить) то будет что-то аля так:

    Код (Text):
     ATimeInWork := IncMinute(0, MinutesBetween(AFinishDate, AStartDate) -
    Max(0, Trunc(AFinishDate) - Trunc(AStartDate) - 1) * 15 * 60 -
    IfThen(Trunc(AFinishDate) <> Trunc(AStartDate), MinutesBetween(StrToTime('17' + TimeSeparator +
    '00' + TimeSeparator + '00'), 1) + MinutesBetween(0, StrToTime('8' + TimeSeparator + '00' + TimeSeparator + '00')), 0));
    Сделаны допущения что в AFinishDate - время выдачи из ремонта, AStartDat - время сдачи в ремонт - БЕЗ СЕКУНД И МИЛЛИСЕКУНД - иначе возможна погрешность в 1 минуту .. лень разбираться где она.
    Время работы с 8 до 17.00...

    В ATimeInWork - время сколько конкретно прошло рабочего времени между сдачей и получением..
     
  3. Snickbw

    Snickbw Гость

    Спасибо.
     
  4. Barmutik

    Barmutik Гость

    Коротко :( Удачи!
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей