Мы выполняем сервис, это основано на SLA с 2 рабочими днями, поэтому если запрос отправлен в 13:00 в понедельник, он должен быть завершен к 13:00 среды.
Таким образом в базе данных я имею две метки времени MySQL YYYY/MM/DD HH:MM:SS и нуждаюсь в некотором способе отработать время между этими двумя датами в рабочее время, на основе рабочего дня 9:00 до 17:00.
Кто-либо может дать мне какие-либо идеи?
Самый простой способ было хранить таблицу в вашу базу данных одной строкой на каждый день, содержащая рабочее время, доступное в этот день. Это позволяет вам обращаться с праздниками и неделями с высокой гранулярностью, и вы можете получить количество времени, доступное, выполнив сумму в течение нескольких дней между двумя датами, указанными пользователем.
Создание этого через SQL только жесткий. В Mysql разница между временем между временем можно рассчитать этот путь ...
SELECT TIMESTAMPDIFF(HOUR,T.ts2,T.ts1)
FROM test AS T;
... но у этого OFC не принимает во внимание никаких рабочих часов.
Пожалуйста, имейте в виду, что SQL не знает ваших часов офиса, и те могут полагаться на другие факторы (выходные, банковские праздники или что-то еще). Для того, чтобы сделать это, вам придется сначала установить календарный стол, а затем начать расчеты.
У меня была похожая проблема несколько лет назад, во там я использовал скрипт Backend, в котором я определил время и праздники. Затем я рассчитал будущий меток, вставляя данные в первую очередь, это было намного проще и более гибким.
В общем, учитывая метки времени A и B, где A - время начала:
В вашем примере, если A - это понедельник в 13:00, а B - среда в 13:00, то D - это 2. Так как время одно и то же, H равно 0, то общая разница составляет 2 рабочих дня.
Если бы B было 15:00 среды, то общая разница была бы 2 дня плюс 2 часа.
Если бы B было 9 утра среды, то общая разница была бы 1 день плюс 4 часа.
Вышеуказанный метод не учитывает выходные или праздничные дни, поэтому вам пришлось бы внести соответствующие изменения.