Как добавить день сверху, если дата меняется на другой день

Я делаю новостной сайт для игр, и мне нужна страница, где вы можете найти все новости. Поэтому я решил использовать его, как это делают многие веб-страницы.

Пример:

Теперь я хочу этого, но я не знаю, как это сделать. Я немного начал, и я надеюсь, что вы, ребята, поможете мне с этим!

$query = mysql_query("SELECT * FROM `gb_news` order by `datetime` DESC");

while($news = mysql_fetch_array($query)) {

        echo $news['title'];
        echo $news['datetime']; 

}

Это действительно простой код, но я только хочу знать, как я добавляю эти дни, когда у артиста есть новая дата в базе данных.

4 ответа

Решение

Сохраните дату вне цикла, затем отображайте заголовок только при изменении даты.

$date = "";
while ($news = mysql_fetch_array($query)) {
    if ($news['datetime'] != $date) {
        $date = $news['datetime'];
        echo $date;
    }
    echo $news['title'];
}

Я не уверен, что понимаю, чего вы пытаетесь достичь. Чтобы ваши данные отображались как изображение, которое вы включили, вам нужно сгруппировать элементы с одинаковой датой либо в MySQL, либо в PHP (или, в действительности, в комбинации).

Что-то вроде:

while ($news...) {

    // Get this article date
    $thisDate = new DateTime($news['datetime']) // Assuming this is a true datetime value

    // Compare this article date with previous article date to determine if we should start a new date header
    if (!empty($onDate) // We have previous articles to compare with
        && ($thisDate->format('l d F') == $onDate)) // This article date matches previous so keep in same group
    {
        echo $news['title'];
    } else { // No existing articles or new date = new header
        $onDate = $thisDate->format('l d F'); // See options: http://www.php.net/manual/en/function.date.php
        echo $onDate
        echo $news['title'];
    }

}

Нечто подобное может работать для вас:

$query = mysql_query("SELECT * FROM `gb_news` order by `datetime` DESC");

$prevDate ='';
while($news = mysql_fetch_array($query))
{
    $tmpDate = DateTime::createFromFormat('Y-m-d H:i:s', $news['datetime']);
    if($prevDate!=$tmpDate)
    {
        $prevDate = $tmpDate->format('d/m/Y');
        echo '<h1>'.$prevDate.'</h1><hr />';
    }
    echo '<p>'.$tmpDate->format('H:i').' - '.$news['title'].'</p>';
}

Предполагается, что ваш столбец даты и времени имеет формат YYYY-MM-DD hh:mm:ss и вы хотите отобразить дату как DD/MM/YYYY, очевидно, редактировать по вкусу!

Также ваша версия PHP должна быть>= 5.3.0, чтобы использовать класс DateTime

Ну, что вы можете сделать, это сохранить дату, а затем изменять макет каждый раз, когда дата меняется:

while($news = mysql_fetch_array($query)) {
  if(empty($date) || $date != date("format", $news['datetime'])){
     $date = date("format", $news['datetime']);
     //echo/print some html to show new section
  }  
  echo $news['title'];
  echo $news['datetime']; 
}

Это будет обрабатывать сравнение дат и знать, когда менять даты. "формат" указывает тип форматирования даты, который вы хотели бы, так как вы можете повторить / распечатать $date,

Дата PHP

ЗАМЕЧАНИЕ. Не используйте MySQL_*, так как он устарел с версии PHP 5.5. Вместо этого используйте MySQLi_* или PDO

Другие вопросы по тегам