日付()関数は、現在のPHPによって構成されたデフォルトのタイムゾーンに従って時間を出力します。デフォルトのタイムゾーンは、 date_default_timezone_set()を介して設定するか、 php.iniから読み取ります。
gmdate()関数は常にグリニッジ標準時間(UTC)を返し、デフォルトのタイムゾーン設定の影響を受けません。
<?php
// デフォルトのタイムゾーンを上海時間に設定します(東第8地区)
date_default_timezone_set('Asia/Shanghai');
echo "date() 出力時間:" . date('Y-m-d H:i:s') . "\n"; // 現地時間出力,例えば 2025-05-22 16:00:00
echo "gmdate() 出力時間:" . gmdate('Y-m-d H:i:s') . "\n"; // 出力 UTC 時間,例えば 2025-05-22 08:00:00
?>
このコードは、date()とgmdate()出力の違いを示しており、使用するときはこれに注意を払う必要があります。
アプリケーションロジックに現地時間とUTC時間の両方が必要な場合、2つを明確に区別し、混乱しないでください。
タイムスタンプを均一に保ちます<br> タイムスタンプ( time()またはstrtotime() )を使用して、形式のタイム文字列を直接操作することを避けるために、時間の統一された表現として使用します。
タイムゾーンを変換するときは、DateTimeクラスを使用します
PHPのDateTimeおよびDateTimeZoneクラスは、より強力で柔軟なタイムゾーン変換機能を提供します。
<?php
// 現在のものを取得します UTC 時間
$utcTime = new DateTime('now', new DateTimeZone('UTC'));
// 意思 UTC 時間转换为上海時間
$localTime = clone $utcTime;
$localTime->setTimezone(new DateTimeZone('Asia/Shanghai'));
echo "UTC 時間:" . $utcTime->format('Y-m-d H:i:s') . "\n";
echo "上海時間:" . $localTime->format('Y-m-d H:i:s') . "\n";
?>
これにより、 gmdate()とdate()の使用の間の混乱を回避するだけでなく、タイムゾーンの明確な制御と変換も可能にします。
gmdate()によって生成された文字列を現地時間として直接使用しないでください。
UTCタイムタイムスタンプまたはフォーマット文字列を生成する必要がある場合は、 gmdate()を自信を持って使用できます。
タイムスタンプを現地時間にフォーマットする場合は、日付()関数を使用して、正しいタイムゾーンを設定します。
<?php
function formatTimeWithTimezone(int $timestamp, string $timezone = 'Asia/Shanghai'): string {
$dt = new DateTime("@$timestamp"); // 使用時間戳创建 DateTime 物体,デフォルトはです UTC
$dt->setTimezone(new DateTimeZone($timezone)); // ターゲットタイムゾーンを設定します
return $dt->format('Y-m-d H:i:s T'); // 出力带时区缩写的時間
}
$nowTimestamp = time();
echo "当前時間(上海):" . formatTimeWithTimezone($nowTimestamp, 'Asia/Shanghai') . "\n";
echo "当前時間(UTC):" . formatTimeWithTimezone($nowTimestamp, 'UTC') . "\n";
?>
これにより、出力時間が正確であり、タイムゾーン情報があることが保証され、混乱によるエラーが回避されます。
gmdate()はUTC時間を返し、日付()は現在のデフォルトタイムゾーン時間を返します。
処理時間の場合、タイムスタンプを統一時間形式として使用することをお勧めします。
DateTimeおよびDateTimeZoneクラスを使用して、タイムゾーンの変換をより柔軟に処理します。
タイムゾーンの混乱によって引き起こされるエラーを回避するために、GMDATE()と日付()を意志で混合しないでください。
これらの重要なポイントを習得した後、PHP時間処理はより堅牢になり、時間を出力するときにタイムゾーンの混乱を避けます。