2

そう!基本的に、私はたくさんのブログ投稿を含むデータベースを持っています。これらはすべて UNIX タイムスタンプでソートされています。必要なのは、このコードが適切なときにヘッダーを吐き出す方法で、次のような出力が得られます。

2008年

11月

タイトル 1 - ここに日付が入ります
タイトル 2 - ここに日付が入ります

12月

タイトル 3 - ここに日付が入ります

2009年

1月

タイトル 4 - ここに日付が入ります

など

これまでのところ私のコードは次のとおりです。これは年の比較まで機能しますが、1月が実際に12月の後に来るように、賢明な方法で月を比較する良い方法を考え出す必要があります。 13ヶ月目。

[コード]

<?php   
   if ($db = new PDO('sqlite:./db/blog.sqlite3')) {
         $stmt = $db->prepare("SELECT * FROM news ORDER BY date DESC");
         if ($stmt->execute()) {
               while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
                     $current_year = date("Y", $row[1]);
                     $current_month = date("m", $row[1]);
                     if ($current_year > $last_year) {
                           echo "<h1>" . $current_year . "</h1>";
                           $last_year = $current_year;
                     }
                     echo "<tr>";
                     echo "<td align='left'><a href='view_post.php?post_id=". $row[1] ."'>" . $row['0'] . " - " . date("Y-m-d, H:i:s", $row[1]) . "</a></td>";
                     echo "</tr>";
               }
         }
   } else {
         die($sqliteerror);
   }
?>

[/コード]

4

3 に答える 3

2

UNIXタイムスタンプを使用すると、次のようなことができます(疑似コードは明らかに)

prev_month = null
prev_year = null
foreach results as r
    new_month = date('F', r[timestamp]);
    new_year = date('Y', r[timestamp]);
    if(prev_month != new_month)
        //display month
    /if

    if(prev_year != new_year)
        //display year
    /if

    // display other info

    prev_month = new_month
    prev_year = new_year
/foreach
于 2009-06-29T21:55:15.113 に答える