5

私のサーバーはダラスにあります。私はニューヨーク市にいます。PHPとMySQLの両方に、タイムゾーンを設定するための構成変数があります。

それらすべてを連携させるにはどうすればよいですか?MySQLに保存する必要がある日付は何ですか?ユーザーの好みに基づいて日付の変更をPHPに処理させるにはどうすればよいですか?

覚えておいてください:PHPが日付を明示的に設定しているとは思いません。クエリでは常に「NOW()」を使用しています。ただし、これを行う必要があると予想しています。これはどのように行われますか?

SOの経験がここで私を助けてくれることを願っています。

4

4 に答える 4

16

どこでも Unix Time を使用します。UTC を使用しているため、すべてのタイムゾーンで同じです。日付のメソッドは通常、それらが持っているタイムゾーン情報を使用して日付に変換したり、日付から元に戻したりするため、正しい時刻が得られます。

別の方法として、Unix Time を使用して、あるコンピューターから別のコンピューターに時間を転送することもできます (DB から PHP を実行しているサーバーや JavaScript クライアントなど)。すべての言語で、それに変換する機能とそこから変換する機能があります。MySQL の場合は次のとおりです。

UNIX_TIMESTAMP(date)
FROM_UNIXTIME(unix_timestamp)

そうすれば、DB とログで時刻を適切にフォーマットできますが、どこでも正しい現地時刻を保持できます。

于 2009-01-10T09:33:35.360 に答える
2

私は、環境に関してネイティブ形式で日付と時刻を使用することを好みます。つまり、PHP では Unix タイムスタンプを使用し、MySQL では DATE/TIME/DATETIME/TIMESTAMP フィールドを使用します。FROM_UNIXTIME()と を使用して、両方の値を別の値に変換しますUNIX_TIMESTAMP()。ネイティブの日付/時刻の方がはるかに読みやすいため、Unix タイムスタンプの代わりにこれを好みます。

于 2009-01-10T14:01:46.707 に答える
0

日付をGMT(ゼロオフセット)で記録してから、ローカルタイムゾーンに基づいてオフセットを計算します(たとえば、ESTは+6なので、GMTに6時間を追加します)。

関数の日付ドキュメントを確認してくださいdate_default_timezone_set()

データベースに書き込むときは、タイムゾーンを変更し、日付を保存してから、元に戻す必要があることを覚えておいてください。同様に、日付を取得するときは、タイムゾーンオフセットを追加することを忘れないでください。

于 2009-01-10T08:22:57.047 に答える
0

mysql-server は、日付をタイムゾーンに依存しない形式 (UTC) で保存します。
ただし、日付を保存する前に、タイムゾーンを使用して変換されます。

接続ごとに mysql のタイムゾーンを変更できます *1:

mysql_query('SET time_zone = "'.$timezone.'"');

スクリプトごとにタイムゾーンを変更することもできます。

date_default_timezone_set($timezone);

それらを同じタイムゾーンに設定すると、「2009-01-10 13:30:00」はmysqlとphpの両方に同じことを意味します。

ただし、2 つのサーバーの内部時計の値が異なることに注意してください。そのため、現在の時刻に基づいてタイムスタンプを生成したい場合は. mysql または php でそれを行います。

*1) MySQL タイムゾーンのサポートには、追加の構成が必要になる場合があります。マニュアルを確認する

于 2009-01-10T12:31:50.397 に答える