Если сегодняшняя дата 15.11.2016 то нужно вывести предыдущие 7 14.11.2016 13.11.2016 и т.д. Так как то не фонтан. PHP: <?php $date = date("Y-m-d"); echo "".$date."<br>"; $yesterday = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")-1, date("Y"))); echo "".$yesterday."<br>"; $day = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")-2, date("Y"))); echo "".$day."<br>"; $day1 = date("Y-m-d",mktime(0, 0, 0, date("m") , date("d")-3, date("Y"))); echo "".$day1."<br>"; ?>
@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
Кое как сделал PHP: $date_begin = '2016-11-20'; $date_end = date('Y-m-d', strtotime($dates.' - 10 days')); $dates = $date_begin; while($date_end <= $dates){ echo '<li>'.$dates.''; $dates = date('Y-m-d', strtotime($dates.' - 1 days')); $result2 = mysql_query("SELECT `date`.*, count(`date`.`id`) AS da FROM `date` WHERE `date`.`date`='$dates' GROUP BY '$dates' ORDER BY date DESC, id DESC"); if (mysql_num_rows($result2) > 0){ while($myrow2 = mysql_fetch_array($result2)){ echo '-'.$myrow2["da"].'</li>'; } }} ?> но выводится 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
Есть бд 'date' где лежат посты которые нужно посчитать по датам их добавления и вывести в статистике по дням.Сделал вот так PHP: <?php $date_begin = '2016-11-20'; $date_end = date('Y-m-d', strtotime($dates.' - 10 days')); $dates = $date_begin; while($date_end <= $dates){ echo '<li>'.$dates.''; $dates = date('Y-m-d', strtotime($dates.' - 1 days')); $dat = date('Y-m-d', strtotime($dates.' + 1 days')); $result2 = mysql_query("SELECT `date`.*, count(`date`.`id`) AS da FROM `date` WHERE `date`.`date`='$dat' GROUP BY '$dates' ORDER BY date DESC, id DESC"); if (mysql_num_rows($result2) > 0){ while($myrow2 = mysql_fetch_array($result2)){ echo '-'.$myrow2["da"].'</li>'; } }} ?> вроде бы работает но по коду я не знаю может есть и правильней.
лирическое отступление: @leshiy запомни, надо избегать sql-запросов в цикле! это очень медленно и сильно греет сервер. sql изначально написан для обработки множеств, не надо перекладывать эту работу на у*бищный пхп. по сути: лень вникать, но похоже проблема в проверке граничного условия: типа меньше-либо-равно вместо меньше. проверь себя, не методом тыка, а логически рассуждая. --- Добавлено --- ну и GROUP BY ты используешь неправильно, хотя этим грешат 99% нубов. один раз выясни для чего нужна группировка чтобы не писать ерунду.