0

これを行う方法をいくつか知っていますが、その多くは DateTime クラス オブジェクトを使用しています。以下を使用してタイムスタンプをデータベースに保存しています。

date_default_timezone_set("America/Phoenix");
$time=time();
$timezone='America/Chicago';
//$time and $timezone are then stored accordingly.

次に、自分のタイムゾーンで時間を取得できます。

date_default_timezone_set("America/Phoenix");
echo date("m/d/Y g:i:s a",$time);
//or if I want to display it to the user:
date_default_timezone_set($timezone);
echo date("m/d/Y g:i:s a",$time);

私の質問は、PHP のタイムゾーンをこのように操作して、日付と時刻の表示に関して局所性を実現することは適切ですか、それともパッケージ化されたオブジェクトの 1 つを使用してこれを処理する必要がありますか?

4

1 に答える 1

0

これを処理するには、PHP に組み込まれているDateTimeオブジェクト ファミリを使用することをお勧めします。タイムゾーンの変換は非常に簡単に行うことができます:

 // assuming the data coming from the database and it's in the America/Phoenix timezone
 $localtime = DateTime::createFromFormat('Y-m-d H:i:s', $db_date_string, new DateTimeZone('America/Phoenix'));
 $chicago_time = $localtime;
 $chicago_time->setTimeZone(new DateTimeZone('America/Chicago'));
 print $chicago_time->format('m/d/Y g:i:s a');

これにより、タイムゾーンの操作が可能な限り狭い範囲で維持されます (1 つの日時のみ)。

また、データベース データを 1 つのタイムゾーンのみに保存し、表示/使用の直前にアプリケーションで変換することをお勧めします。これにより、デバッグ時の混乱を大幅に軽減できます。(それは少なくとも私を救ったかもしれません:-P)

于 2012-08-01T20:44:27.267 に答える