0

これを行うには複雑な方法が多すぎるように思われるので、この問題に対する明確で簡潔な答えを探しています。

ブログを作成し、[送信]をクリックすると、タイトル、コンテンツ、およびタイムスタンプがブログテーブルに挿入されます。その後、ブログはblogindex.phpページに表示され、日付はMM-DD-YYYYの形式になります。

だからこれは私の3ステップの質問です:

  1. 日付を挿入するのに最適な列タイプは何ですか?(例:INT、VARCHARなど)

  2. 使用するのに最適なINSERTINTOコマンドは何ですか?(例:NOW()、CURDATE()など)

  3. テーブルをクエリしてこのデータを配列で取得する場合、それをエコーするための最良の方法は何ですか?

私はPHP/MySQLを初めて使用するので、用語がわからず、このトピックに関する1000の異なる意見を読んでイライラしすぎて、私の問題に具体的に対処していない場合、または3つの質問の1つだけをカバーしている場合はご容赦ください...

4

4 に答える 4

1

これがあなたの3つの質問に対する私の意見です:

  1. 正しいデータ型を使用してください:DateまたはDateTime。時刻も保存するので、DateTimeタイプを選択します(投稿を追加したときに、ある種の順序が必要な場合は非常に便利な場合があります)。

  2. それはすべて、日付( CURDATE()を使用)または日付+時刻(NOW()を使用)のどちらが必要かによって異なります。

  3. データをフェッチして、希望どおりにフォーマットします。クエリではまだフォーマットせず、適切なPHP関数を使用してください(たとえば、DateTimeを使用)。データをどのようにフェッチするかは、それほど重要ではありません。PDOまたはMySQLiまたは...を使用できます

于 2012-10-17T22:48:38.260 に答える
0

日付と時刻は常にUTCで保存および処理し、プレゼンテーション層でタイムゾーンの調整を実行します。これにより、長期的には大幅に簡素化されます。

MySQLには、日付と時刻を操作するためのさまざまなタイプが用意されていますが、心配する必要があるDATETIMEのは(DATEタイプは時間情報を格納しないため、情報が失われるとタイムゾーンの変換が台無しになり、TIMESTAMPタイプは自動UTCを実行します)変換(システムのタイムゾーン情報が変更された場合にプログラムを台無しにする可能性があります)であり、範囲が狭くなります(1970-2038)。

このCURDATE()関数は現在の日付のみを返し、時刻情報を除外しますが、これはローカルタイムゾーンの情報を返します。これは変更される可能性があります。これは避けてください。このNOW()関数は改善されていますが、ここでも、現在のタイムゾーンのデータを返します。

すべてをUTCで保持する必要があるため、実際にはUTC_TIMESTAMP 関数を使用する必要があります。

値を返すには、次のように、変数を使用してSQLコマンドを順番に実行する必要があります。

SET @now = UTC_TIMESTAMP()
INSERT INTO myTable ( utcDateTimeCreatedOrSomething ) VALUES ( @now )
SELECT @now
于 2012-10-17T22:49:52.307 に答える
0

日付はおそらく最良のタイプですが、日時はより正確な記録としても機能します。

「最適な挿入」はありませんが、実際に何が必要で、日付をどの程度正確にする必要がありますか。ブログの場合は、日時にしてNOW()を使用します。そのため、訪問者はこの投稿がいつ行われたかを非常に正確に確認できます。

確かに、sqlを実行し、php by googleを使用してsqlからselectクエリをフェッチするための巨大なものを簡単に見つけることができるので、この簡単な作業はあなた自身に任せます。

日付をエコーするには、次のようなphp日付形式を使用できます。

$today = date("m-d-y");                         // 03-10-01
于 2012-10-17T22:52:16.420 に答える
0

Styxxyはかなり正しいと思いますが、ここにPHPの日付フォーマット部分へのリンクがあります... PHPでdatetimeを最も簡単にフォーマットする方法は? (サポートリンク: http://php.net/manual/en/datetime.format.php ) 基本的には
echo date("d/m/Y", strtotime('2009-12-09 13:32:15') です) ... ただし、 strtotimeは既に datetime の型を持っているはずなので不要だと思います。

MySQLに関しては、はい、datetime colとして実行し、NOW()をSQLキーワードとして使用し、データベースから取得する方法に応じて...

SELECT CAST( col_nameAS DATE) .... または .... SELECT CAST( col_nameAS DATETIME) <-- この最後のものは、col タイプのために暗示されます。

幸運を!:)

于 2012-10-17T22:56:41.830 に答える