2

日付の処理については、多くの推奨事項があります。何かを明確にしたいだけです。まあ言ってみれば:

  • ユーザーがデータベースにレコードを挿入しています
  • このレコードの挿入日の UNIX タイムスタンプが生成されます

ここで、ユーザーはデータベースで日付間隔を照会したいと考えています。

  • ユーザーは自分のローカル タイムゾーンで 2 つの日付を指定します
  • これらの値を使用してタイムゾーンを UTC に変換し、タイムスタンプを取得します
  • 変換からの 2 つの整数に基づいてデータベース内のレコードを照会します (例: WHERE 日付 >= FIRST および日付 <= SECOND)
  • 取得したタイムスタンプをローカル タイムゾーンに再度変換して表示する

PHPでそれが可能であることは知っていますが、この場合、mysqlのタイムゾーン設定を気にする必要はありません-phpのみです。システムは 64 ビットなので、日付を保存するスペースが不足することは問題になりません。しかし ...

DST の変更など、他の重大な問題が発生する可能性はありますか?

4

2 に答える 2

2

Unix タイムスタンプはタイムゾーンに依存しません。

これが、このステップを変更できる理由でもあります。

これらの値を使用してタイムゾーンを UTC に変換し、タイムスタンプを取得します

これに:

値を Unix タイムスタンプに変換する

タイムスタンプをデータベース (MySQL など) に保存するのは非常に簡単ですが。次のようにすれば、PHP に Unix タイムスタンプがあることを確認できます。

  • MySQL の関数を使用して値を保存しますFROM_UNIXTIME()(引数として Unix タイムスタンプを指定すると、MySQL の設定に従って日時を受け取ります)。
  • MySQL の関数 (フィールドの名前または値を引数として指定)を使用して値を取得するUNIX_TIMESTAMP()と、MySQL の設定に従ってデータベースに格納されている日時に基づいて Unix タイムスタンプ (整数) が取得されます。

TIMESTAMPタイムスタンプを格納するために列タイプを使用することを忘れないでください。このようにして、時間はタイムゾーンに依存しない方法で保存され、MySQL の設定に従ってのみ表示されます。

于 2012-09-21T11:19:07.793 に答える
0

Tadeckは、Unixタイムスタンプがタイムゾーンに依存しないということは正しいです。

ただし、アプリケーション全体でタイムスタンプを使用する場合は、タイムスタンプをデータベースにプレーンINTとして保存して使用する必要があります。アプリケーションレベル(PHP)でローカルタイムゾーンとの間で変換します。これにより、2つのシステムではなく、PHPのタイムゾーンのみに関心を持つことができます。また、アプリケーションレベルでの個々のユーザーのタイムゾーンの設定も簡単になります。

于 2012-09-21T11:30:42.470 に答える