Как добавить день сверху, если дата меняется на другой день
Я делаю новостной сайт для игр, и мне нужна страница, где вы можете найти все новости. Поэтому я решил использовать его, как это делают многие веб-страницы.
Пример:
Теперь я хочу этого, но я не знаю, как это сделать. Я немного начал, и я надеюсь, что вы, ребята, поможете мне с этим!
$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
,
ЗАМЕЧАНИЕ. Не используйте MySQL_*, так как он устарел с версии PHP 5.5. Вместо этого используйте MySQLi_* или PDO