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

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

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
TheOFF
Отправлено: 29 Апреля, 2016 - 18:35:14
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2016  


Помог: 0 раз(а)




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

График работы м изображении.
Прикреплено изображение (Нажмите для увеличения)
post-125-1461906281.jpg
 
 Top
kuller
Отправлено: 29 Апреля, 2016 - 18:38:49
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




if, date больше не чего не надо.
 
 Top
TheOFF
Отправлено: 29 Апреля, 2016 - 18:41:33
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2016  


Помог: 0 раз(а)




От чего отталкиваться? Например я ввожу в форму 29.04.15 20:00. На основании чего скрипт вычислит номер бригады?
 
 Top
kuller
Отправлено: 29 Апреля, 2016 - 18:47:39
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




TheOFF пишет:
От чего отталкиваться? Например я ввожу в форму 29.04.15 20:00. На основании чего скрипт вычислит номер бригады?


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

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


будет искать точное совпадение. Формат даты должен быть Y-m-d

(Отредактировано автором: 29 Апреля, 2016 - 18:48:16)

 
 Top
TheOFF
Отправлено: 29 Апреля, 2016 - 19:07:04
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2016  


Помог: 0 раз(а)




При вводе в форму даты и времени скрипт должен выдавать номер бригады (согласно) графика приведенного в первом сообщении. Можно конечно вбить весь график в базу и уже от туда дергать инфу о конкретном дне, но это как-то неправильно, при том что есть в графике закономерность.
 
 Top
IllusionMH
Отправлено: 29 Апреля, 2016 - 19:27:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




TheOFF, в чем вообще ппроблема?
1) Дергаете список выходных (из файла или базы - неважно)
2) Проверяете выходной
2.1) Если выходной - 4ая
3) А дальше хоть через switch..case проверяйте время и выдавайте группу
 
 Top
TheOFF
Отправлено: 29 Апреля, 2016 - 20:58:16
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2016  


Помог: 0 раз(а)




IllusionMH пишет:
1) Дергаете список выходных (из файла или базы - неважно)


С базой сделать не проблема, как это сделать без базы используя закономерность графика?
 
 Top
Ch_chov
Отправлено: 29 Апреля, 2016 - 22:13:40
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Делал такую же штуку несколько лет назад. График непрерывный 4-х бригадный с циклом 16 дней. Поэтму база не нужна.

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

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

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

(Отредактировано автором: 30 Апреля, 2016 - 10:27:03)

 
 Top
Строитель Модератор
Отправлено: 29 Апреля, 2016 - 23:17:58
Post Id



Участник


Покинул форум
Сообщений всего: 1581
Дата рег-ции: Февр. 2014  
Откуда: Украина


Помог: 74 раз(а)




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.  

На счёт смещения я ниасилил, что и куда смещать.
 
 Top
TheOFF
Отправлено: 19 Мая, 2016 - 10:48:05
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2016  


Помог: 0 раз(а)




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. ?>
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB