10

以下の PHP コードを完成させて、出力がユーザー フレンドリな形式 (たとえば、「2006 年 10 月 27 日」) になるようにする最も簡単で最速の方法は何ですか?

$result = mysql_query("SELECT my_timestamp FROM some_table WHERE id=42", $DB_CONN);
$row = mysql_fetch_array($result);
$formatted_date = ???($row['my_timestamp']);
echo $formatted_date;
4

8 に答える 8

23

MySQL を使用してこれを行うことができます。

$result = mysql_query("SELECT DATE_FORMAT(my_timestamp, '%M %d, %Y) AS my_timestamp FROM some_table WHERE id=42", $DB_CONN);
$row = mysql_fetch_array($result);
$formatted_date = $row['my_timestamp'];
echo $formatted_date;

または、PHP を使用して、

$result = mysql_query("SELECT my_timestamp FROM some_table WHERE id=42", $DB_CONN);
$row = mysql_fetch_array($result);
$formatted_date = strftime('%B %d, %y', $row['my_timestamp']);
echo $formatted_date;
于 2008-10-26T14:34:35.613 に答える
10

Aronanswerのように、SQL で日付の書式設定を行う傾向があります。PHP の日付については、 dateよりもDateTimeオブジェクト (PHP5+) を使用することを好みます。

$timestamp = new DateTime($row['my_timestamp']);
echo $timestamp->format('F j, Y') . '<br />';
echo $timestamp->format('F j, Y g:ia');
于 2008-10-26T16:05:18.443 に答える
2

date()関数が必要です。

DATE または DATETIME 列がある場合は、SELECT UNIX_TIMESTAMP(mycolumn) AS mycolumn を使用して、使用する日付関数の UNIX タイムスタンプに変換できます。

于 2008-10-26T14:35:32.413 に答える
2

DateTime クラス (または自家栽培の同等のクラス) を Date 関数よりも確実に使用し、タイムスタンプを使用しないでください。

  • タイムスタンプは、1970 年より前の日付のすべての環境でうまく機能しません - 誕生日を扱う場合、一部のサーバーで壊れる可能性のあるコードに依存しています
  • strftime の使用にも細心の注意を払ってください。これは優れた関数のように見えますが、プロセス全体にわたる setlocale に依存するため、非常に信頼性が低くなります。これが意味することは、サーバーが Windows ボックスの場合、プロセッサごとに 1 つのプロセスがあり、残りはマルチスレッドであるということです。つまり、1 つのスクリプト内の 1 つの setlocale が、同じプロセッサ上の他のスクリプトに影響を与えます。非常に厄介です。 !

結局のところ、英語のみの環境でない限り、タイムスタンプに頼らず、1970 年から 2032 年までの日付のみを処理してください...!

于 2008-10-26T16:21:18.237 に答える
1

その日付フィールドでテーブルにインデックスが付けられていて、呼び出しでmysqlデータ形式関数を使用している場合(つまり、.. SELECT DATE_FORMAT(my_timestamp、'%M%d、%Y)AS my_time)、インデックスが破棄されます。覚えておくべきこと。sqlステートメントからすべての機能を削除し、phpにすべてを処理させることで、速度が劇的に向上しました。日付の書式設定や簡単な計算などの機能

于 2008-10-27T13:51:18.120 に答える
0

選択肢があります。PHP でdate()関数を使用して MySQL からの出力を処理するか、MySQL でdate_format()関数を使用してフォーマットされた文字列を最初に返すようにすることができます。

私の経験では、どちらを使用しても問題はありませんが、一貫性を保つようにしてください。これらには異なる書式設定パラメータがあるため、特定のアプリケーションで両方を使用すると、'W' が曜日名または年間通算週名を与えるかどうかを覚えようとして多くの時間を費やすことになります。

于 2008-10-26T14:52:29.620 に答える
0

データベースに書式を設定してもらいます。文字列を読み取って変換するのではないため、エラーが発生する可能性ははるかに低くなります。代わりに、データベースはネイティブ形式から文字列になります。

于 2008-10-27T14:07:19.523 に答える
0

私が使う:

date("F j, Y", strtotime($row['my_timestamp']))

または、SELECT を次のように変更できます: DATE_FORMAT(field,'%d %M, %Y') as datetime

于 2008-10-26T14:32:53.417 に答える