PHP: форматировать и сортировать даты из базы данных MySQL - PullRequest
1 голос
/ 29 сентября 2010

У меня есть эти даты mysql в таблице моей базы данных,

2010-07-16 20:09:06
2010-08-16 20:19:43
2010-10-18 16:57:19
2009-09-18 16:57:42
2009-10-18 16:57:55
2009-12-24 14:59:21

Как я могу отсортировать их по приведенному ниже результату, чтобы конечный пользователь мог просматривать результаты за месяц?

<h2>2010</h2>
<ul>
 <li><a href="#">October</a></li>
 <li><a href="#">November</a></li>
 <li><a href="#">December</a></li>
</ul>

<h2>2009</h2>
<ul>
 <li><a href="#">September</a></li>
 <li><a href="#">October</a></li>
 <li><a href="#">November</a></li>
 <li><a href="#">December</a></li>
</ul>

ни о чем не может думать!

Я обычно использую gmdate () для форматирования дат из базы данных mysql, например,

<?php
 $sql = "
 SELECT *
 FROM root_pages

 WHERE root_pages.pg_hide != '1'

 ORDER BY pg_created DESC";

#instantiate the object of __database class
$object_items = new __database(DB_HOST,DB_USER,DB_PASS,DB_NAME);
$items = $object_items -> fetch_all($sql);

echo  gmdate('j/n/Y', strtotime($item['pg_created']));
?>

было бы здорово, если бы вы дали мне подсказку для начала!* спасибо, Лау

Ответы [ 3 ]

1 голос
/ 29 сентября 2010

Есть много способов сделать это ... Используя MySQL, вы можете

SELECT DISTINCT YEAR(dt) y, MONTH(dt) m FROM t ORDER BY dt DESC

Затем просмотреть результаты:

$year = null;
foreach ($rows as $row)
{
  if ($year != $row->y)
  {
    if ($year) echo "</ul>";
    $year = $row->y;
    echo "<h2>$year</h2>\n";
    echo "<ul>\n";
  }

  echo "<li><a href='#'>{$month_name[$row->m]}</a></li>\n";
}
if ($year) echo "</ul>";

Предполагается, что существует массив с именем $month_name, который отображает номер месяца на его имя.

Этот метод наиболее полезен, если вам не нужны другие данные для этой страницы.Если вам нужны полные данные, вы можете удалить DISTINCT из SQL, SELECT все необходимое поле и добавить переменную для отслеживания текущего $month на протяжении итерации, как в приведенном выше коде$year.

1 голос
/ 29 сентября 2010

Предположим, date - интересующий вас столбец даты.

SELECT DATE_FORMAT(`date`, '%m-%Y') AS `formatted_date`
FROM `pages`
GROUP BY `formatted_date`
ORDER BY `date`

08-2010
09-2010
11-2010
12-2010
02-2011
03-2011

Это дает вам все месяцы, на которых есть страницы.Это должно быть достаточно просто, чтобы вывести это в некотором HTML.Некоторые функции, которые могут помочь по пути: explode, mktime, strtotime, date.

0 голосов
/ 09 мая 2013

Вы можете использовать мой трюк:

1 получить всю информацию из MySQL как есть, используя некоторые советы других комментариев.

2 сделать массив, используя strtotime:

<php? $r=array((int)strtotime('2010-07-16')=>'2010-07-16 20:09:06',) ?>

3 - отсортировать, используя

ksort($r,SORT_NUMERIC) or krsort,

Веселитесь с функциями сортировки php. http://www.php.net/manual/en/function.sort.php

Примечание. Единственный недостаток этого подхода состоит в том, что в 32-разрядной машине числовые значения имеют пределы, и числа, превышающие (int) 2147483647, должны быть преобразованы как (строки) или (с плавающей точкой) для использования в качестве ключей массива.

Вы можете использовать точку (строку) '2147483647.'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...