3

MySQL の日付フィールドを省略された曜日として出力する方法を見つけたり、理解したりするのに苦労しています。

これを MySQL と PHP のどちらで行うべきかわかりません。

理想的には PHP 関数でこれを行いたいのですが、複雑なことに、曜日として出力したい日付フィールドが while ループを介してテーブルに実行されています。これは、MySQLでそれを行う必要があると私に思わせます。

基本的に、PHP の mktime() や MySQL の DAYOFWEEK() などを使用できるようにしたいのですが、while ループでこれを実行できるようにする必要があるため、変数または列名を使用できるようにする必要があります。書式設定のために 1 つの特定の日付を入力または取得する必要はありません。

どんな助けでも大歓迎です!

PS データが現在データベースからどのように取得されているかを下に追加しました。### は私が問題を抱えている場所です。これは、「e_date」列を使用して日をエコーする必要がある場所です。(次の日付も「e_date」列を使用します。)

// Get all the data from the "events" table
            $result = mysql_query("
            SELECT *
            FROM events
            WHERE e_type != '' && e_date >= CURDATE() && e_date <= (CURDATE() + 15)
            ORDER BY e_date,e_ampm,e_time") 
            or die(mysql_error());  

            echo "<table border='1' style=\"border:none;font-size:12px;\">";
            echo "<tr> <th>Day</th> <th>Date</th> <th>Time</th> <th>Type</th> <th>Description</th> </tr>";
            // keeps getting the next row until there are no more to get
            while($row = mysql_fetch_array( $result )) {
                // Print out the contents of each row into a table
                echo "<tr><td>";
                ###
                echo "</td><td>";
                echo $row['e_date'];
                echo "</td><td>";
                echo $row['e_time'];
                echo $row['e_ampm'];
                echo "</td><td>";
                echo $row['e_type'];
                echo "</td><td>";
                echo $row['e_name'];
                echo "</td></tr>"; 
            } 

            echo "</table>";
4

3 に答える 3

2

この修正版を試してみてください。DATE_FORMAT を使用し、datefield を入力変数として使用できます。%a は出力のフォーマットを示します。%a は、DATE_FORMAT に日付の短縮された日を返すように指示します。しばらく MySQL を使用していないので、間違っている可能性があります。

// Get all the data from the "events" table
        $result = mysql_query("
        SELECT DATE_FORMAT(e_date, '%a') as day, e_date, e_time, e_ampm, e_type,e_name
        FROM events
        WHERE e_type != '' && e_date >= CURDATE() && e_date <= (CURDATE() + 15)
        ORDER BY e_date,e_ampm,e_time") 
        or die(mysql_error());  

        echo "<table border='1' style=\"border:none;font-size:12px;\">";
        echo "<tr> <th>Day</th> <th>Date</th> <th>Time</th> <th>Type</th>    <th>Description</th> </tr>";
        // keeps getting the next row until there are no more to get
        while($row = mysql_fetch_array( $result )) {
            // Print out the contents of each row into a table
            echo "<tr><td>";
            echo $row['day'];
            echo "</td><td>";
            echo $row['e_date'];
            echo "</td><td>";
            echo $row['e_time'];
            echo $row['e_ampm'];
            echo "</td><td>";
            echo $row['e_type'];
            echo "</td><td>";
            echo $row['e_name'];
            echo "</td></tr>"; 
        } 

        echo "</table>";
于 2012-04-18T02:18:09.560 に答える
0

私のアドバイスは常にunixtime形式の日付を扱うことです。私は常に日付を整数フィールドとしてデータベースに保存します。

あなたの場合、それをunixtimeに変換することによって日付フィールドを照会し、phpdate関数にフォーマットを処理させることができます。

<?php

$query = "
SELECT UNIX_TIMESTAMP(e_date) AS UNIXTIME, *
FROM events
WHERE e_type != '' && e_date >= CURDATE() && e_date <= (CURDATE() + 15)
ORDER BY e_date,e_ampm,e_time";

$result = mysql_query($query) or die("error");
...

while($row = mysql_fetch_array( $result ))
{
    echo "<tr>";
    echo sprintf('<td>%s</td>', date('l', $row["UNIXTIME"])); //day of week
    ...
    echo "</tr>";
}

?>
于 2012-04-18T02:48:16.880 に答える
0

データベースの部分はデータを処理し、PHP に表示するようにします。MySQL からデータを取得する方法に応じて、strftime()または使用したいと考えています。strptime()

于 2012-04-18T01:56:22.887 に答える