PHP для вычисления числа рабочего дня между двумя датами

Мы выполняем сервис, это основано на SLA с 2 рабочими днями, поэтому если запрос отправлен в 13:00 в понедельник, он должен быть завершен к 13:00 среды.

Таким образом в базе данных я имею две метки времени MySQL YYYY/MM/DD HH:MM:SS и нуждаюсь в некотором способе отработать время между этими двумя датами в рабочее время, на основе рабочего дня 9:00 до 17:00.

Кто-либо может дать мне какие-либо идеи?

7
задан S.L. Barth - Reinstate Monica 24 July 2012 в 09:52
поделиться

3 ответа

Самый простой способ было хранить таблицу в вашу базу данных одной строкой на каждый день, содержащая рабочее время, доступное в этот день. Это позволяет вам обращаться с праздниками и неделями с высокой гранулярностью, и вы можете получить количество времени, доступное, выполнив сумму в течение нескольких дней между двумя датами, указанными пользователем.

1
ответ дан 7 December 2019 в 20:37
поделиться

Создание этого через SQL только жесткий. В Mysql разница между временем между временем можно рассчитать этот путь ...

SELECT TIMESTAMPDIFF(HOUR,T.ts2,T.ts1) 
FROM test AS T;

... но у этого OFC не принимает во внимание никаких рабочих часов.

Пожалуйста, имейте в виду, что SQL не знает ваших часов офиса, и те могут полагаться на другие факторы (выходные, банковские праздники или что-то еще). Для того, чтобы сделать это, вам придется сначала установить календарный стол, а затем начать расчеты.

У меня была похожая проблема несколько лет назад, во там я использовал скрипт Backend, в котором я определил время и праздники. Затем я рассчитал будущий меток, вставляя данные в первую очередь, это было намного проще и более гибким.

0
ответ дан 7 December 2019 в 20:37
поделиться

В общем, учитывая метки времени A и B, где A - время начала:

  • определить количество дней между A и B (есть легкие способы сделать это), назовите это D
  • если HH:MM:SS для метки времени B больше или равно для A, затем добавьте разницу во времени H, давая D (дни) + H (время)
  • если HH: ММ:SS для отметки времени B меньше, чем для A, вычтите 1 из D и прибавите 8 часов минус разница во времени H, получив D - 1 (дни) + 8 (часы) - H

В вашем примере, если A - это понедельник в 13:00, а B - среда в 13:00, то D - это 2. Так как время одно и то же, H равно 0, то общая разница составляет 2 рабочих дня.

Если бы B было 15:00 среды, то общая разница была бы 2 дня плюс 2 часа.

Если бы B было 9 утра среды, то общая разница была бы 1 день плюс 4 часа.

Вышеуказанный метод не учитывает выходные или праздничные дни, поэтому вам пришлось бы внести соответствующие изменения.

0
ответ дан 7 December 2019 в 20:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: