PHP:格式化和排序来自 MySQL 数据库的日期

标签 php mysql date

我的数据库表中有这些 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']));
?>

如果你能给我一些开始的提示就太好了!

谢谢, 刘

最佳答案

有很多方法可以做到这一点...使用 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 的数组,它将月份数字映射到它的名称。

如果您不需要该页面的其他数据,则此方法最有用。如果您确实需要完整的数据,那么您可以从 SQL 中删除 DISTINCTSELECT 所有您需要的字段,并添加一个变量来跟踪当前的 $month 贯穿整个迭代,就像上面的代码对 $year 所做的那样。

关于PHP:格式化和排序来自 MySQL 数据库的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3818159/

相关文章:

php - 在 Symfony 1.4 和 Doctrine 中使用一个查询插入多行

php - Cron 作业 + 推特

java - 如何将时区字符串转换为 Java 中的 TimeZone 对象?

php - MySql:索引循环

php - 我应该如何在 PHP 中编写包含 LIKE 的 SQL 查询?

mysql - 仅从多列中选择唯一记录

mysql - 在 Rails 中按月和年对记录进行分组

带有 COUNT 的 MySQL 运行总计

php - 如何使 strtotime 解析澳大利亚(即英国)格式的日期 : dd/mm/yyyy?

php - 如何更改php中的时区?