PHP – исключить все нерабочие часы / дни из разницы во времени

У меня есть таблица, показывающая время с момента начала работы.

// These are unix epoch times... $raised = 1360947684; $now = 1361192598; $difference = 244914; 

$difference должна исключать любое время вне рабочего времени (например, 9-5 и выходные).

Как я мог это решить?

То, что вам нужно сделать, – 3 цифры.

  1. Вы берете дату начала и вычисляете время отдыха в этот день (если это рабочий день)
  2. Вы принимаете дату окончания и определяете время в этот день и
  3. вы проводите дни между ними и умножаете их на свои рабочие часы (только те, которые являются рабочими днями)

И с этим вы закончили.

Найдите небольшой класс, который делает эти вещи. Имейте в виду, что нет обработки ошибок, настроек часового пояса, летнего времени, …

вход:

  • Дата начала
  • Дата окончания

вывод:

  • время разницы в секундах

регулируемые константы:

  • Рабочие часы
  • Дни, которые не являются рабочими днями

Используйте DateTime .

Использование UNIX-времени для этого немного абсурдно, и вам придется буквально переделать DateTime .
Посмотрите относительные форматы, где вы можете указать час дня, например

 $date = new DateTime($raised); $business_start = new DateTime("09:00"); // 9am today $business_end = new DateTime("17:00"); // 5pm today 

Остальное – для вас.

О, и вместо начала / конца вы, вероятно, можете использовать DateInterval со значением P8H ( «период 8 часов» )

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