PHP は、タイムスタンプ処理をサポートする一般的に使用されるプログラミング言語です。タイムスタンプは、1970 年 1 月 1 日からのコンピューター内の秒数を指し、イベントがいつ発生したかを記録するためによく使用されます。ただし、PHP では、タイムスタンプを時刻に変換した結果が不正確になる場合があります。この記事では、タイムスタンプが不正確になる理由と解決策について説明します。
多くの PHP プログラマは、タイムスタンプを時刻に変換するときに、結果が常に不正確になるという問題に遭遇したことがあるかもしれません。たとえば、次のコードを使用してタイムスタンプを日付に変換できます:
$timestamp = 1597833600; $date = date('Y-m-d H:i:s', $timestamp); echo $date;
結果出力は 2020-08-19 07:00:00
ですが、実際にはこの時刻は不正確です。このコードをローカル コンピューター (特に中国のタイムゾーン) で実行すると、時刻が実際より 8 時間早いことがわかります。その理由は、PHP の date() 関数がデフォルトで現在のタイムゾーンではなくグリニッジ標準時 (GMT) を使用するためです。
この問題を解決するには、単純にタイムゾーンを設定する必要があります。タイムゾーンは、PHP の date_default_timezone_set()
関数を呼び出すことで設定できます。たとえば、中国のタイムゾーンで PHP を実行している場合、次のコードを使用できます:
date_default_timezone_set('Asia/Shanghai');
ここでは、タイムゾーンを設定する アジア/上海の場合、これは中国のタイムゾーンです。設定すると、上記のコードを使用してタイムスタンプを日付に変換すると、出力は 2020-08-19 15:00:00
になります。
タイムゾーンをローカルタイムゾーンに設定することに加えて、PHP の DateTime クラスを使用してこの問題を解決することもできます。 DateTime クラスは、PHP 5.2.0 で導入された強力なクラスで、タイムゾーンの問題を含む日付と時刻を処理できます。
DateTime クラスを使用する場合、次のサンプル コードを使用してタイムスタンプを日付に変換できます:
$timestamp = 1597833600; $date = new DateTime(); $date->setTimezone(new DateTimeZone('Asia/Shanghai')); $date->setTimestamp($timestamp); echo $date->format('Y-m-d H:i:s');
この例では、最初に DateTime オブジェクトを作成し、次にタイム ゾーンを設定します。ローカルタイムゾーンに合わせます。次に、タイムスタンプを設定し、日付出力としてフォーマットします。結果は、正しいローカル日時になります (例: 2020-08-19 15:00:00
)。
もう 1 つのオプションの解決策は、PHP DateTime クラスを拡張するサードパーティ ライブラリである Carbon クラスを使用することです。 Carbon を使用すると、日付と時刻を簡単に管理し、タイムゾーンの問題に対処できます。
以下は、Carbon クラスを使用してタイムスタンプを日付に変換するサンプル コードです:
$timestamp = 1597833600; $date = \Carbon\Carbon::createFromTimestamp($timestamp, 'Asia/Shanghai'); echo $date->format('Y-m-d H:i:s');
この例では、Carbon::createFromTimestamp()## を使用して作成しました。 # メソッド タイムゾーンがローカルタイムゾーンに設定された Carbon オブジェクト。次に、これを日付出力としてフォーマットし、出力は
2020-08-19 15:00:00 となります。
以上がPHP でのタイムスタンプ変換が不正確な場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。