需要显示按日期排序但按周分隔的mysql表

时间:2012-09-06 19:01:38

标签: php mysql date sorting

我正在使用PHP和MySQL。我有一个页面显示由人创建的会议,其中包含查看详细信息的链接。现在我只使用一个简单的表来显示按日期排序的所有内容。数据库中的表称为“会议”,有3列 -

'meetingid'(int)

'时间'(日期时间)

'creator'(文字)

我的问题是,当有很多会议被创建时,它看起来有点混乱和难以阅读,因为它们只是在一个大块中。我希望按周分开(从周一开始,到周日结束 - 或周日 - 周六,如果这更容易)。我已经链接到底部的文档,显示我目前拥有的内容(第一页)和更像我想要的内容(第二页)。周标签(例如9月3日 - 9月9日)只需要预订会议就可以继续。因此,如果最近的会议是10月7日,那么显示的最后一周应该是“10月1日 - 10月7日”。弄清楚如何按月分开它们似乎很容易,但我无法围绕如何按周完成它。我假设有一些PHP日期函数将有助于此,但我找不到它。希望你们都能提供帮助。

这样做的最佳方式是什么?

我还没有决定是否要在没有会议的周上显示周标签。 (例如,9月10日至9月16日之间没有会议。 - 这样做或不显示该标签。

链接到示例(无需登录google) https://docs.google.com/document/d/16cvRfPmovNBsx9QQ0U5qhVoW8bo0xjEABil3wTtEUrA/edit

2 个答案:

答案 0 :(得分:1)

使用日期(“W”)获取一年中的周数。然后您可以根据周数分隔结果。

答案 1 :(得分:0)

不知道您的数据结构如何;您可以使用date()函数返回的周数来跟踪您所在的周数并将其分解。

$currentWeekNumber = -1;
$rows = array(
    array('id' => 5, 'started_by' => 'Ben', 'when' => '2012-09-06 09:00:00'),
    array('id' => 6, 'started_by' => 'Julie', 'when' => '2012-09-07 18:00:00'),    
    array('id' => 18, 'started_by' => 'Ben', 'when' => '2012-09-18 20:00:00')
);

foreach($rows as $row) {
    $eventSeconds = strtotime($row['when']);

    $rowWeek = intval(date('W', $eventSeconds));

    if( $rowWeek !== $currentWeekNumber && $currentWeekNumber !== -1) {
        echo "----- Week Break ------\n";
    }

    $currentWeekNumber = $rowWeek;
    echo "Meeting #{$row['id']}, started by {$row['started_by']}, occurs at ".strftime('%c', $eventSeconds)."\n";
}

产生以下输出:

Meeting #5, started by Ben, occurs at Thu Sep  6 09:00:00 2012
Meeting #6, started by Julie, occurs at Fri Sep  7 18:00:00 2012
----- Week Break ------
Meeting #18, started by Ben, occurs at Tue Sep 18 20:00:00 2012