Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Скрипт определения рабочего времени
Форумы портала PHP.SU » » Вопросы новичков » Скрипт определения рабочего времени

Страниц (1): [1]
 

1. TheOFF - 29 Апреля, 2016 - 18:35:14 - перейти к сообщению
Хочу написать скрипт определения номера бригады работающей в данный момент времени. напремер сегодня с 0:00 до 8:00 работает бригада 1, 8:00 до 16:00 работает бригада 2, 16:00 до 24:00 работает бригада 3, 4 на выходном. Как реализовать, с чего начать?

График работы м изображении.
2. kuller - 29 Апреля, 2016 - 18:38:49 - перейти к сообщению
if, date больше не чего не надо.
3. TheOFF - 29 Апреля, 2016 - 18:41:33 - перейти к сообщению
От чего отталкиваться? Например я ввожу в форму 29.04.15 20:00. На основании чего скрипт вычислит номер бригады?
4. kuller - 29 Апреля, 2016 - 18:47:39 - перейти к сообщению
TheOFF пишет:
От чего отталкиваться? Например я ввожу в форму 29.04.15 20:00. На основании чего скрипт вычислит номер бригады?


во первых записи сохрани в базу. после уже делай форму куда будешь вводить дату. После делаешь поиск по базе. Примерно так.

CODE (javascript):
скопировать код в буфер обмена
  1. SELECT * FROM brigada WHERE data='$data' LIMIT 1


будет искать точное совпадение. Формат даты должен быть Y-m-d
5. TheOFF - 29 Апреля, 2016 - 19:07:04 - перейти к сообщению
При вводе в форму даты и времени скрипт должен выдавать номер бригады (согласно) графика приведенного в первом сообщении. Можно конечно вбить весь график в базу и уже от туда дергать инфу о конкретном дне, но это как-то неправильно, при том что есть в графике закономерность.
6. IllusionMH - 29 Апреля, 2016 - 19:27:31 - перейти к сообщению
TheOFF, в чем вообще ппроблема?
1) Дергаете список выходных (из файла или базы - неважно)
2) Проверяете выходной
2.1) Если выходной - 4ая
3) А дальше хоть через switch..case проверяйте время и выдавайте группу
7. TheOFF - 29 Апреля, 2016 - 20:58:16 - перейти к сообщению
IllusionMH пишет:
1) Дергаете список выходных (из файла или базы - неважно)


С базой сделать не проблема, как это сделать без базы используя закономерность графика?
8. Ch_chov - 29 Апреля, 2016 - 22:13:40 - перейти к сообщению
Делал такую же штуку несколько лет назад. График непрерывный 4-х бригадный с циклом 16 дней. Поэтму база не нужна.

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

2) Берёте эталонную дату для которой известен режим работы бригад (например 1 января 2016) и находите разность с текущей датой.

3) Делите эту разность на 16 и остаток от деления передаете как аргумент в функцию из п.1.
9. Строитель - 29 Апреля, 2016 - 23:17:58 - перейти к сообщению
TheOFF пишет:
скрипт определения номера бригады работающей в данный момент времени. напремер сегодня с 0:00 до 8:00 работает бригада 1, 8:00 до 16:00 работает бригада 2, 16:00 до 24:00 работает бригада 3
PHP:
скопировать код в буфер обмена
  1. $i = intval(date('H') / 8);
  2.  
  3. echo 'Работает бригада '. ++$i;
  4.  

На счёт смещения я ниасилил, что и куда смещать.
10. TheOFF - 19 Мая, 2016 - 10:48:05 - перейти к сообщению
Ch_chov пишет:
Делал такую же штуку несколько лет назад. График непрерывный 4-х бригадный с циклом 16 дней. Поэтму база не нужна.

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

2) Берёте эталонную дату для которой известен режим работы бригад (например 1 января 2016) и находите разность с текущей датой.

3) Делите эту разность на 16 и остаток от деления передаете как аргумент в функцию из п.1.


Спасибо, очень помогло.
Получилась вот такая штука:

PHP:
скопировать код в буфер обмена
  1. <?
  2. if ((strtotime(date("G:i")) >= (strtotime('7:30'))) && (strtotime(date("G:i")) <= (strtotime('15:29')))){
  3.         $num_sm = 2;
  4. }
  5. elseif ((strtotime(date("G:i")) >= (strtotime('15:30'))) && (strtotime(date("G:i")) <= (strtotime('23:29')))){
  6.         $num_sm = 3;
  7. }
  8. else $num_sm = 1;
  9.  
  10. $date1='2016-01-04';
  11. $date2=date('Y-m-d');
  12. $diff = round((strtotime($date2) - strtotime($date1))/86400);
  13. $sm = array('1', '1', '1', '1', '0', '2', '2', '2', '2', '0', '3', '3', '3', '3', '0', '0');
  14. $k = 1;
  15. $num = $diff - floor($diff/16)*16;    // для бригады 1
  16. do {
  17.       if ($num_sm != $sm[$num]){
  18.         $num = $num + 4; //сдвиг графика для других бригад
  19.           if ($num>=16) $num = $num - 16;
  20.         $k = $k+1;
  21.         }
  22. }
  23. while($num_sm != $sm[$num]);
  24. echo 'работает бригада №'.$k.' смена №'.$sm[$num];
  25. ?>

 

Powered by ExBB FM 1.0 RC1