За последние 24 часа нас посетил 22521 программист и 1112 роботов. Сейчас ищут 627 программистов ...

Получение массива дней

Тема в разделе "PHP для новичков", создана пользователем Miracleon, 29 мар 2021.

Метки:
  1. Miracleon

    Miracleon Новичок

    С нами с:
    9 мар 2020
    Сообщения:
    25
    Симпатии:
    0
    Есть два массива в одном начальные даты бронирования в другом конечные.
    ["2021-03-29","2021-04-1"]
    ["2021-03-31","2021-04-2"]
    Нужно получить массив вот такого вида:
    ["2021-03-29","2021-03-30","2021-03-31","2021-04-1","2021-04-2"]
    PHP:
    1. <?php
    2.  
    3. $query=mysqli_query($con,"SELECT * from reserve
    4. where id_room='$id_room'");
    5.  
    6. while ($row=mysqli_fetch_array($query))
    7. {
    8.     $mass[] = $row['datearrive'];
    9.     $mass1[] = $row['dateleave'];
    10. }
    11.  
    12. ?>  
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
  3. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Работай с датами как unix timestamp или как с объектами DateTime, тогда всё будет просто и безошибочно. "2021-03-29" это не дата, а вариант текстового представления даты.
    Попробуй например так
    PHP:
    1. <?php
    2.  
    3. $d1 = strtotime('2021-03-29');
    4. $d2 = strtotime('2021-04-01');
    5.  
    6. for ($d = $d1; $d <= $d2; $d = strtotime('+1 day', $d)) {
    7.   echo date("Y-m-d\n", $d); // вместо этого может быть запись в БД
    8. }
    проверка в текстовой консоли
    Код (Text):
    1.  
    2. $ php test.php
    3. 2021-03-29
    4. 2021-03-30
    5. 2021-03-31
    6. 2021-04-01
    --- Добавлено ---
    для DateTime (или Carbon\Carbon) нагугли пример сам.
    --- Добавлено ---
    Но возможно, что ты зря хочешь "получить массив". Вычисления/сравнения полей типа DATE или DATETIME должны происходить на сервере БД, а не в PHP. типа ...WHERE x BETWEEN date1 AND date2

    Можешь рассказать об исходной задаче, а не о том, как ты предполагаешь её решать?
     
  4. Miracleon

    Miracleon Новичок

    С нами с:
    9 мар 2020
    Сообщения:
    25
    Симпатии:
    0
    Нужно сделать недоступными забронированные дни. Массив дат заношу в Json чтобы заблокировать с помощью скрипта ниже. Проблема в том, что не получается заблокировать промежуточные дни
    Код (Javascript):
    1. <script>
    2. var array =JSON.parse('<?=json_encode($mass) ?>');
    3. $('input').datepicker({
    4.  
    5.     beforeShowDay: function(date){
    6.         var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
    7.    
    8.         return [ array.indexOf(string) == -1 ]
    9.     }
    10. });
    11. </script>