Разница между 2мя датами в часах без учета выходных и праздников |
Здравствуйте Гость [ Вход | Регистрация ] | Форум в сети 7047-й день
![]() |
Шановні користувачі! Запрошуємо вас до офіційного телеграм-канала 0day Community. Тут ви зможете поспілкуватися одне з одним та дізнатися про останні новини щодо роботи ресурса, поставити запитання до адміністрації, тощо. Перейти до телеграм-канала можна відсканувавши QR-код або натиснувши на посилання: @zeroday_ua |
Разница между 2мя датами в часах без учета выходных и праздников |
RipperR |
![]()
Пост
#1
|
Репутация: ![]() ![]() Постоялец ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 153 С нами с: 25-March 08 ![]() |
Кто-то реализовывал на php данную задачу: "Разница между 2мя датами в часах без учета выходных и праздников"
Есть таблица государственных праздников в идеале ее парсить откуда-то, но пока введена вручную. Имеем дата время начала задачи и имеем дату время конца задачи надо вычислить кол-во часов с момента начала задачи исключая отсюда нерабочие дни к примеру праздники и выходные ... а также учитывать рабочий день с 9-00 до 20-00 ... то-есть надо учитывать сколько рабочего времени потратил человек на выполнение задачи. Пока не сильно вкуриваю как это сделать ... Сообщение отредактировал RipperR - Jul 24 2017, 22:31 |
![]() ![]() |
Durex |
Пост
#2
|
Репутация: ![]() ![]() Активист ![]() Группа: Пользователи Сообщений: 291 С нами с: 14-June 06 ![]() |
<?php date_default_timezone_set('UTC+2'); $date = '2009-12-06'; $end_date = '2020-12-31'; $workdays = array(); $a = 1; while (strtotime($date) <= strtotime($end_date)) { $workdays[$a] = $date; $date = date ("Y-m-d", strtotime("+1 day", strtotime($date))); $a++; } echo count($workdays).'<br>'; while(($key = array_search('2019-05-13',$workdays)) !== false) { unset($workdays[$key]); } echo count($workdays).'<br>'; $total = count($workdays)*12; echo "<p>Worked $total hours</p>"; //print_r($workdays); ?> Что-то типа такого. Выходные из таблицы в массив и перебором убрать из массива дней Сообщение отредактировал Durex - Jul 25 2017, 8:25 |
revolver |
Пост
#3
|
Репутация: ![]() ![]() ultra active user ![]() ![]() ![]() ![]() ![]() ![]() Группа: BANNED Сообщений: 33 534 С нами с: 2-June 08 ![]() |
масенький офтоп
буквально на днях похожий вопрос разирался в известном блоге (по бд) How to Count Week Days Between Two Dates? |
RipperR |
Пост
#4
|
Репутация: ![]() ![]() Постоялец ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 153 С нами с: 25-March 08 ![]() |
Сяду сегодня повкуриваю ... просто адовый мопед нехотелось бы делать ...
|
RipperR |
Пост
#5
|
Репутация: ![]() ![]() Постоялец ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 153 С нами с: 25-March 08 ![]() |
<?php date_default_timezone_set('UTC+2'); $date = '2009-12-06'; $end_date = '2020-12-31'; $workdays = array(); $a = 1; while (strtotime($date) <= strtotime($end_date)) { $workdays[$a] = $date; $date = date ("Y-m-d", strtotime("+1 day", strtotime($date))); $a++; } echo count($workdays).'<br>'; while(($key = array_search('2019-05-13',$workdays)) !== false) { unset($workdays[$key]); } echo count($workdays).'<br>'; $total = count($workdays)*12; echo "<p>Worked $total hours</p>"; //print_r($workdays); ?> Что-то типа такого. Выходные из таблицы в массив и перебором убрать из массива дней да но тут в тупую берется count($workdays)*12; А у меня задача началась в 19:00 первого дня закончилась к примеру 12:00 5 дня ... то-есть походу надо тупо лепить свой цикл и обходить тупо им календарь сверяя день недели рабочий ли день итп умножать на типовой рабочий день с коректировкой на первый и последний день ... Сообщение отредактировал RipperR - Jul 26 2017, 11:20 |
vas1 |
Пост
#6
|
Репутация: ![]() ![]() Дух Группа: Пользователи Сообщений: 47 С нами с: 9-February 14 ![]() |
Пользуйтесь карбоном
$dt = Carbon::create(2014, 1, 1); $dt2 = Carbon::create(2014, 12, 31); $daysForExtraCoding = $dt->diffInDaysFiltered(function(Carbon $date) { return $date->isWeekend(); }, $dt2); И потом добавить сколько было часов от начала работы до конца первого дня + от начала последнего дня до конца работы. Сообщение отредактировал vas1 - Jul 26 2017, 11:36 |
RipperR |
Пост
#7
|
Репутация: ![]() ![]() Постоялец ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 153 С нами с: 25-March 08 ![]() |
Не стал разбираться с новой библиотекой ... мне кажется это забивание гвоздя микроскопом ... описал логику циклично вроде все получилось ... осталось там еще до усложнения которые я не описал вам но на это чувствую прийдеться поубивать время ...
Сделал на базе обхода $date = date ("Y-m-d", strtotime("+1 day", strtotime($date))); и добавил проверки на дни недели и есть ли день в праздниках в заранее созданном словаре ... просчет времени сделал как 12 часовой раб день + хвост первого дня и хвост последнего ... Сообщение отредактировал RipperR - Jul 26 2017, 23:10 |
![]() ![]() |
![]() |
Упрощённая версия | Сейчас: 30th June 2025 - 22:56 |
Сайт не розміщує електронні версії творів, а займається лише колекціонуванням та каталогізацією посилань, що публікуються нашими користувачами. Якщо Ви є правовласником якоїсь частини опублікованого матеріалу та не бажаєте, щоб посилання на нього знаходилось в нашому каталозі, зв’яжіться з нами і ми видалимо його. Файли для обміну надані користувачами сайту і адміністрація не несе відповідальності за їх вміст. |