Advertisement
zero50x

Обработка времени

Sep 8th, 2017
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.14 KB | None | 0 0
  1. <?php
  2. ini_set('display_errors', TRUE);
  3. ini_set('display_startup_errors', TRUE);
  4. header('Content-type: text/html; charset=UTF-8');
  5.  
  6. $onetime = 60;
  7. $sec = $onetime * 60;
  8.  
  9. $date = '2017-09-20';
  10.  
  11. $time = array(
  12.     1 => "08:00-20:00",
  13.     2 => "09:00-18:00 13:00-14:00",
  14. );
  15.  
  16. $busy = ['09:00', '10:00'];
  17.  
  18. // 1. Получаем запрошенную дату
  19. // 2. Узнаём какой это день недели
  20. // 3. Забираем из массива режим работы на этот день недели
  21. // 4. Забираем уже существующие записи на эту дату
  22. // 5. Строим список возможного времени для записи
  23.  
  24. // Перерыв это та же запись, только он может быть не кратен времени 1 записи !!
  25.  
  26.  
  27. $breaks = count(explode(' ', $time[1]));
  28. var_dump($breaks);
  29.  
  30. // Вариант, когда внутри дня нет перерывов и записей
  31. $start = explode('-', $time[1]);
  32.  
  33. $DayStart = strtotime("$date ".$start[0]);
  34. $DayFinish = strtotime("$date ".$start[1]);
  35.  
  36. $AllZap = ($DayFinish - $DayStart) / $sec;
  37.  
  38. echo "<br><br>";
  39. echo "$AllZap<br><br>";
  40.  
  41. $freeTime = [];
  42. for ($i = 0; $i < $AllZap; $i++) {
  43.     $StartTime = $DayStart + ($i * $sec);
  44.     $freeTime[] = date("H:i", $StartTime);
  45. }
  46.  
  47. // Если не пустой массив записей, то удалим из массива время на которое уже есть записи (по времени начала смотрим)
  48. if(!empty($busy)){
  49.     $result = array_intersect($freeTime, $busy);
  50.     foreach ($result as $key => $value) {
  51.         unset($freeTime[$key]);
  52.     }
  53. }
  54. // Отсортируем что бы ключи снова пришли в порядок
  55. sort($freeTime);
  56.  
  57. //Добавляем к элементам время окончания что бы нормально отображалось
  58. for ($i = 0; $i < count($freeTime); $i++) {
  59.     $StartTime = $DayStart + ($i * $sec);
  60.     $freeTime[$i] = $freeTime[$i].'-'.date("H:i", strtotime($freeTime[$i]) + $sec);
  61. }
  62.  
  63. var_dump($freeTime);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement