За последние 24 часа нас посетили 48886 программистов и 1804 робота. Сейчас ищут 2524 программиста ...

Вывод дат до текущей

Тема в разделе "PHP для новичков", создана пользователем leshiy, 15 ноя 2016.

  1. leshiy

    leshiy Активный пользователь

    С нами с:
    18 июл 2008
    Сообщения:
    90
    Симпатии:
    0
    Если сегодняшняя дата 15.11.2016 то нужно вывести предыдущие 7
    14.11.2016
    13.11.2016
    и т.д.
    Так как то не фонтан.
    PHP:
    1.  <?php
    2. $date = date("Y-m-d");
    3. echo "".$date."<br>";
    4. $yesterday = date("Y-m-d",mktime(0, 0, 0, date("m")  , date("d")-1, date("Y")));
    5. echo "".$yesterday."<br>";
    6. $day = date("Y-m-d",mktime(0, 0, 0, date("m")  , date("d")-2, date("Y")));
    7. echo "".$day."<br>";
    8. $day1 = date("Y-m-d",mktime(0, 0, 0, date("m")  , date("d")-3, date("Y")));
    9. echo "".$day1."<br>";
    10. ?>
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    а в гугле что по чем? вычесть из даты один день, а там можно for цикл залипить
     
  3. RainBowDash

    RainBowDash Активный пользователь

    С нами с:
    22 июл 2013
    Сообщения:
    220
    Симпатии:
    8
    забанили видимо.
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
  5. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    @leshiy
    дата+время, которую возвращают mktime() или time() представлена в виде целого числа. это секунды с момента "эпохи юникс" — 1 января 1970. в одних сутках 24 * 60 * 60 секунд. прибавляя или отнимая от даты это число ты получаешь следующий или предыдущий день. это знают даже детсадовцы.

    а вот чего многие не знают, так это про связь таймстампа и часового пояса. и это источник многочисленных ошибок. скопировал годный скрипт с локалки на сервер, а он вдруг работает неправильно.
    "сегодня" в зоне Asia/Yekaterinburg и в зоне America/Chicago это два разных числа, даже если текстовое представление у них совпадает. PHP преобразуем таймстампы в строку и обратно, имея в виду "текущий часовой пояс" системы, который по умолчанию задается в файле php.ini, но может быть изменен програмно через date_default_timezone_set().

    см. также
    https://php.ru/forum/threads/rabota-s-datoj-v-mysql-php-zagotovka-faq.50838/
    https://php.ru/forum/threads/algoritmy-poleznosti.54173/#post-491494
     
  6. leshiy

    leshiy Активный пользователь

    С нами с:
    18 июл 2008
    Сообщения:
    90
    Симпатии:
    0
    Кое как сделал
    PHP:
    1. $date_begin = '2016-11-20';
    2. $date_end = date('Y-m-d', strtotime($dates.' - 10 days'));
    3. $dates = $date_begin;
    4. while($date_end <= $dates){
    5.   echo '<li>'.$dates.'';
    6.   $dates = date('Y-m-d', strtotime($dates.' - 1 days'));
    7.  $result2 = mysql_query("SELECT `date`.*, count(`date`.`id`) AS da
    8.  FROM `date`
    9.   WHERE `date`.`date`='$dates'
    10.  GROUP BY '$dates'
    11.   ORDER BY date DESC, id DESC");
    12. if (mysql_num_rows($result2) > 0){
    13.   while($myrow2 = mysql_fetch_array($result2)){
    14.   echo '-'.$myrow2["da"].'</li>';
    15.   }
    16. }}
    17. ?>
    но выводится
      • 2016-11-20
      • 2016-11-19
      • 2016-11-18
      • 2016-11-17
      • 2016-11-16-30
      • 2016-11-15-30
      • 2016-11-14-20
      • 2016-11-13-30
      • 2016-11-12-20
      • 2016-11-11-20
      • 2016-11-10-32
      • 2016-11-09-20
      • 2016-11-08
      • 2016-11-07-14
      • 2016-11-06
      • 2016-11-05-20
    а должно так:
      • 2016-11-20
      • 2016-11-19
      • 2016-11-18
      • 2016-11-17
      • 2016-11-16
      • 2016-11-15-30
      • 2016-11-14-30
      • 2016-11-13-20
      • 2016-11-12-30
      • 2016-11-11-20
      • 2016-11-10-20
      • 2016-11-09-32
      • 2016-11-08-20
      • 2016-11-07
      • 2016-11-06-14
      • 2016-11-05
     
  7. RainBowDash

    RainBowDash Активный пользователь

    С нами с:
    22 июл 2013
    Сообщения:
    220
    Симпатии:
    8
    тут без экстрасенсов никак, увы.
     
  8. leshiy

    leshiy Активный пользователь

    С нами с:
    18 июл 2008
    Сообщения:
    90
    Симпатии:
    0
    Есть бд 'date' где лежат посты которые нужно посчитать по датам их добавления и вывести в статистике по дням.Сделал вот так
    PHP:
    1. <?php
    2. $date_begin = '2016-11-20';
    3. $date_end = date('Y-m-d', strtotime($dates.' - 10 days'));
    4. $dates = $date_begin;
    5. while($date_end <= $dates){
    6.     echo '<li>'.$dates.'';
    7.     $dates = date('Y-m-d', strtotime($dates.' - 1 days'));
    8.     $dat = date('Y-m-d', strtotime($dates.' + 1 days'));  
    9. $result2 = mysql_query("SELECT `date`.*, count(`date`.`id`) AS da
    10.    FROM `date`
    11.    WHERE `date`.`date`='$dat'
    12.    GROUP BY '$dates'
    13.    ORDER BY date DESC, id DESC");
    14. if (mysql_num_rows($result2) > 0){
    15.     while($myrow2 = mysql_fetch_array($result2)){
    16.         echo '-'.$myrow2["da"].'</li>';
    17.     }
    18. }}
    19. ?>
    вроде бы работает но по коду я не знаю может есть и правильней.
     
  9. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    лирическое отступление:
    @leshiy запомни, надо избегать sql-запросов в цикле! это очень медленно и сильно греет сервер. sql изначально написан для обработки множеств, не надо перекладывать эту работу на у*бищный пхп.

    по сути:
    лень вникать, но похоже проблема в проверке граничного условия: типа меньше-либо-равно вместо меньше. проверь себя, не методом тыка, а логически рассуждая.
    --- Добавлено ---
    ну и GROUP BY ты используешь неправильно, хотя этим грешат 99% нубов. один раз выясни для чего нужна группировка чтобы не писать ерунду.
     
    denis01 нравится это.