За последние 24 часа нас посетили 15882 программиста и 1665 роботов. Сейчас ищут 797 программистов ...

Сделай за меня определение учебной недели

Тема в разделе "Сделайте за меня", создана пользователем MinorityMeaning, 27 мар 2017.

  1. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @MinorityMeaning ну так всё круто же оно вернуло тебе число с которым ты можешь сравнивать те с time()
    слушай меня- кто тут из нас программист?
     
    MinorityMeaning нравится это.
  2. MinorityMeaning

    MinorityMeaning Новичок

    С нами с:
    27 мар 2017
    Сообщения:
    40
    Симпатии:
    2
    Хорошо, а как мне вернуть время после сравнения в формат hh:mm?
     
  3. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
  4. MinorityMeaning

    MinorityMeaning Новичок

    С нами с:
    27 мар 2017
    Сообщения:
    40
    Симпатии:
    2
    Из этого я делаю вывод: в PHP нельзя просто так вычитать и слаживать даты.
    То есть, сначала я превращаю их в секунды, потом вычитаю или сравниваю.
    А как потом работать с результатом в секундах? Например если я захочу вывести его в формате hh:mm или просто в минутах.
    Например для вывода:
    Конец пары: через 70 минут.
     
  5. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    а вот это ошибочно
    ну как с цифрами то есть чтобы получить минуты дели секунды на 60
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    хз что такое слаживать, но я у тебя второй раз спрошу (третий не стану - я перестану писать в тему): что ты вообще хочешь получить складывая и вычитая даты?
     
  7. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @igordata я тоже когда-то так пытался он хочет типа
    2ч11м+3ч00м=5ч11м
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ты не знаешь, сколько секунд в минуте? ну раздели полученную разницу на 60 и будут тебе минуты. Если хочешь красивые периоды - для этого есть методы объекта даты http://php.net/manual/en/datetime.diff.php см пример. Но нахрена тебе это нужно? У тебя что, бывает так, что пара может длиться "4 год 3 мес 16 день 2 час 07 минут"? Забей. Просто дели на 60 и всё.
    --- Добавлено ---
    @abrdabr понятно

    @MinorityMeaning
    Длительность это не дата. Длительность это период времени. Дата - это отметка на календаре. Если посчитать расстояние между датами - это не будет датой. Поэтому его нельзя прогнать через функцию даты. Все даты - относительны начала отсчета. Все расстояния абсолютны, не зависимо от начала отсчета. Вот в чем соль.
     
  9. MinorityMeaning

    MinorityMeaning Новичок

    С нами с:
    27 мар 2017
    Сообщения:
    40
    Симпатии:
    2
    Ну хорошо. Конкретно в моём случае, нужно вычесть от времени окончания пары текущее время, чтобы узнать сколько осталось до окончания пары

    Лягу ка я спать, обмозгую всё это дело во сне, глядишь завтра набросаю алгоритм.
    Если что, напишу о результатах или проблемах
     
    #34 MinorityMeaning, 30 мар 2017
    Последнее редактирование: 30 мар 2017
  10. MinorityMeaning

    MinorityMeaning Новичок

    С нами с:
    27 мар 2017
    Сообщения:
    40
    Симпатии:
    2
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Круто, поздравляю!

    Теперь точно можно идти спать с чувством выполненного долга.
     
    MinorityMeaning нравится это.
  12. MinorityMeaning

    MinorityMeaning Новичок

    С нами с:
    27 мар 2017
    Сообщения:
    40
    Симпатии:
    2
    PHP:
    1. $nachalo = [
    2.     "strtotime('8:30')", "strtotime('10:15')", "strtotime('12:00')",
    3.     "strtotime('14:05')", "strtotime('15:50')", "strtotime('17:35')",
    4.     ];
    5.  
    6. echo $nachalo[0];
    Результат: Выводит strtotime('8:30')

    А есть ли возможность использовать strtotime внутри массива так, чтобы он выполнялся?
     
  13. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
  14. MinorityMeaning

    MinorityMeaning Новичок

    С нами с:
    27 мар 2017
    Сообщения:
    40
    Симпатии:
    2
    То есть мне нужно поступить вот так:
    PHP:
    1. array_walk($nachalo, 'strtotime');
    И уже потом:echo $nachalo[0] выведет то что нужно
     
  15. MinorityMeaning

    MinorityMeaning Новичок

    С нами с:
    27 мар 2017
    Сообщения:
    40
    Симпатии:
    2
    @abrdabr не смог разобраться с array_walk
    Но вроде foreach справляется с задачей:
    PHP:
    1. $nachalo = [
    2.     "8:30", "10:15", "12:00",
    3.     "14:05", "15:50", "17:35",
    4.     ];
    5.  
    6. foreach ($nachalo as &$value) {
    7.     $value = strtotime($value);
    8. };
    9. unset($value);
    10.  
    11.  
    12. echo $nachalo[0], $nachalo[5] ;
    Спасибо, буду думать дальше
     
  16. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Я в PHP новичок, решил для опыта помочь ТС, посмотрите, может где есть какие замечания или ошибки, вроде все работает, с окончаниями только надо допилить.
    Исходник залил в архив.
    PHP:
    1. <?php
    2. $now = date('G:i');
    3. //$now = "13:36";
    4. //echo $now;
    5. //print_r($par);
    6. $par = array(
    7.             '1par-min' => "8:30",
    8.             '1par-min-min' => "9:15",
    9.             '1par-min-max' => "9:20",
    10.             '1par-max' => "10:05",
    11.             '2par-min' => "10:15",
    12.             '2par-min-min' => "11:00",
    13.             '2par-min-max' => "11:05",
    14.             '2par-max' => "11:50",
    15.             '3par-min' => "12:00",
    16.             '3par-min-min' => "12:45",
    17.             '3par-min-max' => "12:50",
    18.             '3par-max' => "13:35",
    19.             '4par-min' => "14:05",
    20.             '4par-min-min' => "14:50",
    21.             '4par-min-max' => "14:55",
    22.             '4par-max' => "15:40",
    23.             '5par-min' => "15:50",
    24.             '5par-min-min' => "16:35",
    25.             '5par-min-max' => "16:40",
    26.             '5par-max' => "17:25",
    27.             '6par-min' => "17:35",
    28.             '6par-min-min' => "18:20",
    29.             '6par-min-max' => "18:25",
    30.             '6par-max' => "19:10",
    31.             );
    32.  
    33. function DateCheck($date, $min, $max)
    34. {
    35.    $date_min = new DateTime($min); // минимальное значение времени
    36.    $date_max = new DateTime($max); // максимальное значение времени
    37.    $date_now = new DateTime($date); // текущее значение времени
    38.    // Проверяем, находится ли $date_now в диапазоне
    39.    if ($date_now >= $date_min && $date_now <= $date_max)
    40.    {
    41.        return true;
    42.    }
    43.    return false;
    44. }
    45.  
    46. function DateDiff($date1, $date2, $per = ''){
    47.     //$date1 = new DateTime("now");
    48.     $date1 = new DateTime($date1);
    49.     $date2 = new DateTime($date2);
    50.     $interval = $date2->diff($date1);
    51.     if (empty($per)) {
    52.         return $interval->format("%h часов, %i минут\n");
    53.     } else return $interval->format("%i минут\n");
    54.  
    55. }
    56.  
    57. if (DateCheck($now, $par['1par-min'], $par['1par-min-min']) or DateCheck($now, $par['1par-min-max'], $par['1par-max']))
    58.     {
    59.         $para = '1-я пара';
    60.     }
    61. elseif (DateCheck($now, $par['1par-min-min'], $par['1par-min-max']))
    62.     {
    63.         $para = '1-я пара (перерыв пятиминутка)';
    64.     }
    65. elseif (DateCheck($now, $par['1par-max'], $par['2par-min']))
    66.     {
    67.         $para = 'перерыв';
    68.         $perer_1 = 1;
    69.     }
    70. elseif (DateCheck($now, $par['2par-min'], $par['2par-min-min']) or DateCheck($now, $par['2par-min-max'], $par['2par-max']))
    71.     {
    72.         $para = '2-я пара';
    73.     }
    74. elseif (DateCheck($now, $par['2par-min-min'], $par['2par-min-max']))
    75.     {
    76.         $para = '2-я пара (перерыв пятиминутка)';
    77.     }
    78. elseif (DateCheck($now, $par['3par-max'], $par['3par-min']))
    79.     {
    80.         $para = 'перерыв';
    81.         $perer_2 = 1;
    82.     }
    83. elseif (DateCheck($now, $par['3par-min'], $par['3par-min-min']) or DateCheck($now, $par['3par-min-max'], $par['3par-max']))
    84.     {
    85.         $para = '3-я пара';
    86.     }
    87. elseif (DateCheck($now, $par['3par-min-min'], $par['3par-min-max']))
    88.     {
    89.         $para = '3-я пара (перерыв пятиминутка)';
    90.     }
    91. elseif (DateCheck($now, $par['3par-max'], $par['4par-min']))
    92.     {
    93.         $para = 'перерыв';
    94.         $perer_3 = 1;
    95.     }
    96. elseif (DateCheck($now, $par['4par-min'], $par['4par-min-min']) or DateCheck($now, $par['4par-min-max'], $par['4par-max']))
    97.     {
    98.         $para = '4-я пара';
    99.     }
    100. elseif (DateCheck($now, $par['4par-min-min'], $par['4par-min-max']))
    101.     {
    102.         $para = '4-я пара (перерыв пятиминутка)';
    103.     }
    104. elseif (DateCheck($now, $par['4par-max'], $par['5par-min']))
    105.     {
    106.         $para = 'перерыв';
    107.         $perer_4 = 1;
    108.     }
    109. elseif (DateCheck($now, $par['5par-min'], $par['5par-min-min']) or DateCheck($now, $par['5par-min-max'], $par['5par-max']))
    110.     {
    111.         $para = '5-я пара';
    112.     }
    113. elseif (DateCheck($now, $par['5par-min-min'], $par['5par-min-max']))
    114.     {
    115.         $para = '5-я пара (перерыв пятиминутка)';
    116.     }
    117. elseif (DateCheck($now, $par['5par-max'], $par['6par-min']))
    118.     {
    119.         $para = 'перерыв';
    120.         $perer_5 = 1;
    121.     }
    122. elseif (DateCheck($now, $par['6par-min'], $par['6par-min-min']) or DateCheck($now, $par['6par-min-max'], $par['6par-max']))
    123.     {
    124.         $para = '6-я пара';
    125.     }
    126. elseif (DateCheck($now, $par['6par-min-min'], $par['6par-min-max']))
    127.     {
    128.         $para = '6-я пара (перерыв пятиминутка)';
    129.     }
    130. else {
    131.         $para = 'Занятия окончены';
    132.         $perer_11 = 1;
    133. }
    134.  
    135.  
    136. if (isset($perer_11)) {
    137.     $end='Начало пары: 1-я пара через ';
    138.     $end.=' ';
    139.     $end.= DateDiff($now, $par['1par-min']);
    140. }
    141. elseif (isset($perer_1)) {
    142.     $end='Начало пары: 2-я пара через ';
    143.     $end.=' ';
    144.     $end.= DateDiff($now, $par['2par-min']);
    145. }
    146. elseif (isset($perer_2)) {
    147.     $end='Начало пары: 3-я пара через';
    148.     $end.=' ';
    149.     $end.= DateDiff($now, $par['3par-min']);
    150. }
    151. elseif (isset($perer_3)) {
    152.     $end='Начало пары: 4-я пара через';
    153.     $end.=' ';
    154.     $end.= DateDiff($now, $par['4par-min']);
    155. }
    156. elseif (isset($perer_4)) {
    157.     $end='Начало пары: 5-я пара через';
    158.     $end.=' ';
    159.     $end.= DateDiff($now, $par['5par-min']);
    160. }
    161. elseif (isset($perer_5)) {
    162.     $end='Начало пары: 6-я пара через';
    163.     $end.=' ';
    164.     $end.= DateDiff($now, $par['6par-min']);
    165. }
    166. else {
    167.     switch ($para) {
    168.         case "1-я пара":
    169.             $end='Конец пары: 1-я пара через';
    170.             $end.=' ';
    171.             $end.= DateDiff($now, $par['1par-max']);
    172.             break;
    173.         case "2-я пара":
    174.             $end='Конец пары: 2-я пара через';
    175.             $end.=' ';
    176.             $end.= DateDiff($now, $par['2par-max']);
    177.             break;
    178.         case "3-я пара":
    179.             $end='Конец пары: 3-я пара через';
    180.             $end.=' ';
    181.             $end.= DateDiff($now, $par['3par-max']);
    182.             break;
    183.         case "4-я пара":
    184.             $end='Конец пары: 4-я пара через';
    185.             $end.=' ';
    186.             $end.= DateDiff($now, $par['4par-max']);
    187.             break;
    188.         case "5-я пара":
    189.             $end='Конец пары: 5-я пара через';
    190.             $end.=' ';
    191.             $end.= DateDiff($now, $par['5par-max']);
    192.             break;
    193.         case "6-я пара":
    194.             $end='Конец пары: 6-я пара через';
    195.             $end.=' ';
    196.             $end.= DateDiff($now, $par['6par-max']);
    197.             break;
    198.  
    199.         case "1-я пара (перерыв пятиминутка)":
    200.             $end='Конец перерыва: через';
    201.             $end.=' ';
    202.             $end.= DateDiff($now, $par['1par-min-max'], 1);
    203.             break;
    204.         case "2-я пара (перерыв пятиминутка)":
    205.             $end='Конец перерыва: через';
    206.             $end.=' ';
    207.             $end.= DateDiff($now, $par['2par-min-max'], 1);
    208.             break;
    209.         case "3-я пара (перерыв пятиминутка)":
    210.             $end='Конец перерыва: через';
    211.             $end.=' ';
    212.             $end.= DateDiff($now, $par['3par-min-max'], 1);
    213.             break;
    214.         case "4-я пара (перерыв пятиминутка)":
    215.             $end='Конец перерыва: через';
    216.             $end.=' ';
    217.             $end.= DateDiff($now, $par['4par-min-max'], 1);
    218.             break;
    219.         case "5-я пара (перерыв пятиминутка)":
    220.             $end='Конец перерыва: через';
    221.             $end.=' ';
    222.             $end.= DateDiff($now, $par['5par-min-max'], 1);
    223.             break;
    224.         case "6-я пара (перерыв пятиминутка)":
    225.             $end='Конец перерыва: через';
    226.             $end.=' ';
    227.             $end.= DateDiff($now, $par['6par-min-max'], 1);
    228.             break;
    229.     }
    230. }
    231. ?>
    232.  
    233. <div>
    234. <h2>Идет: </h2> <?php echo '<p>'.$para.'.</p>';
    235. echo '<p>'.$end.'</p><br>';
    236. ?>
    237. </div>
     

    Вложения:

    • index.zip
      Размер файла:
      2 КБ
      Просмотров:
      3
    #41 AnonimS, 31 мар 2017
    Последнее редактирование: 31 мар 2017
    denis01 нравится это.
  17. MinorityMeaning

    MinorityMeaning Новичок

    С нами с:
    27 мар 2017
    Сообщения:
    40
    Симпатии:
    2
    Ну надо же, вот так дела. Я тут смотрю ты и с пятиминутками заморочился!
    А я тут с горем пополам свою версию состряпал, только она пятиминутки игнорирует:
    PHP:
    1. <?php
    2. date_default_timezone_set('Asia/Yakutsk');
    3. $tekdate = strtotime(date('G:i')); //Присваиваем текущее время!
    4.  
    5. $nachalo = [                        // Расписание начала пар!
    6.     "8:30", "10:15", "12:00",
    7.     "14:05", "15:50", "17:35",
    8.     ];
    9.  
    10. foreach ($nachalo as &$value) {
    11.     $value = strtotime($value);
    12. };
    13. unset($value);
    14.  
    15. $konec = [                             // Расписание окончания пар!
    16.     "10:05", "11:50", "13:35",
    17.     "15:40", "17:25", "19:10",
    18.     ];
    19.  
    20. foreach ($konec as &$value) {
    21.     $value = strtotime($value);
    22. };
    23. unset($value);
    24.  
    25. $timeNight = strtotime('23:59');
    26. $timeMorning = strtotime('0:00');
    27.  
    28. if ($tekdate >= $nachalo[0] && $tekdate < $konec[5]) {
    29.     if ($tekdate >= $nachalo[0] && $tekdate < $konec[0]) {echo '1 Пара', ' До конца занятия: ', ($konec[0]-$tekdate)/60;
    30.     } elseif ($tekdate >= $konec[0] && $tekdate < $nachalo[1]) { echo 'Перерыв', ' До начала 2 пары: ', ($nachalo[1]-$tekdate)/60; };
    31.  
    32.     if ($tekdate >= $nachalo[1] && $tekdate < $konec[1]) {echo '2 Пара', ' До конца занятия: ', ($konec[1]-$tekdate)/60;
    33.     } elseif ($tekdate >= $konec[1] && $tekdate < $nachalo[2]) { echo 'Перерыв', ' До начала 3 пары: ', ($nachalo[2]-$tekdate)/60; };
    34.  
    35.     if ($tekdate >= $nachalo[2] && $tekdate < $konec[2]) {echo '3 Пара', ' До конца занятия: ', ($konec[2]-$tekdate)/60;
    36.     } elseif ($tekdate >= $konec[2] && $tekdate < $nachalo[3]) { echo 'Перерыв', ' До начала 4 пары: ', ($nachalo[3]-$tekdate)/60; };
    37.  
    38.     if ($tekdate >= $nachalo[3] && $tekdate < $konec[3]) {echo '4 Пара', ' До конца занятия: ', ($konec[3]-$tekdate)/60;
    39.     } elseif ($tekdate >= $konec[3] && $tekdate < $nachalo[4]) { echo 'Перерыв', ' До начала 5 пары: ', ($nachalo[4]-$tekdate)/60; };
    40.  
    41.     if ($tekdate >= $nachalo[4] && $tekdate < $konec[4]) {echo '5 Пара', ' До конца занятия: ', ($konec[4]-$tekdate)/60;
    42.     } elseif ($tekdate >= $konec[4] && $tekdate < $nachalo[5]) { echo 'Перерыв', ' До начала 6 пары: ', ($nachalo[5]-$tekdate)/60; };
    43.  
    44.     if ($tekdate >= $nachalo[5] && $tekdate < $konec[5]) {echo '6 Пара', ' До конца занятия: ', ($konec[5]-$tekdate)/60;
    45.     };
    46. }
    47. elseif ($tekdate >= $konec[5] && $tekdate <= $timeNight) { echo ' Занятия окончены ';}
    48. elseif ($tekdate >= $timeMorning && $tekdate <= $nachalo[0]) { echo ' Начало занятий в 8:30 ';};
    49.  
    50.  
    51.  
    52. ?>
    И ещё одна вещь: Нужно же чтобы ещё алгоритм умел различать дни недели.
    То есть, если конкретнее, чтобы в воскресение выводил, например :СЕГОДНЯ ВЫХОДНОЙ
     
  18. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Ну да, решил, чтобы все учитывалось, но может где ошибся, посмотри..
    В своем коде сделаю легко, подожди часок, освобожусь допишу, что еще нужно?
     
    denis01 и MinorityMeaning нравится это.
  19. MinorityMeaning

    MinorityMeaning Новичок

    С нами с:
    27 мар 2017
    Сообщения:
    40
    Симпатии:
    2
    @AnonimS вручную задавал время, отображает всё правильно =)
    Задачи выполняются, больше и не нужно ничего
     
    #44 MinorityMeaning, 31 мар 2017
    Последнее редактирование: 31 мар 2017
  20. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Вот поменяй на это
    PHP:
    1. ......
    2. <?php if (date("w") != 0): ?>
    3. <div>
    4. <h2>Идет: </h2> <?php echo '<p>'.$para.'.</p>';
    5. echo '<p>'.$end.'</p><br>';
    6. ?>
    7. </div>
    8. <?php else: ?>
    9. <div>
    10. <h2>Сегодня воскресенье, какая учеба?</h2>
    11. </div>
    12. <?php endif ?>
    13. <div>
    14. <h2>Время сейчас: <br><?php echo $now; ?></h2>
    15. </div>
    16. ......
     
    MinorityMeaning и denis01 нравится это.
  21. MinorityMeaning

    MinorityMeaning Новичок

    С нами с:
    27 мар 2017
    Сообщения:
    40
    Симпатии:
    2
    Поставили мне зачёт, однако.
    Препод нашептал в деканате, мол я пхп знаю и все дела, а те позвали на беседу мол плагин надо сделать для сайта. На вордпресе он у них. Я конечно понятия не имел, как они делаются, но сказал сделаю что смогу. Они почему то, по своим соображениям не хотят пользоваться готовыми плагинами, этак вот свой должен быть, и всё тут.
    Создам я, в общем, темку в нужном разделе, попробую также, по старой схеме работать, путём расспросов и наводок.
    Ещё раз спасибо всем за помощь, и до встречи!
     
    denis01 и igordata нравится это.
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    найди форум по вордпрессу. Все цмс со своей спецификой.
     
  23. AnonimS

    AnonimS Новичок

    С нами с:
    8 дек 2016
    Сообщения:
    88
    Симпатии:
    9
    Ну ты все рассказал, как скрипт работает? Создавай, только на будущее, описывай задачу как можно подробнее, по ту сторону экрана тоже люди, которые не в теме, чего там тебе объясняли.

    Удачи!