La fonction date () produit l'heure en fonction du fuseau horaire par défaut configuré par le PHP actuel. Le fuseau horaire par défaut peut être défini via date_default_timezone_set () , ou lus à partir de php.ini .
La fonction GMDate () renvoie toujours Greenwich Standard Time (UTC) et n'est pas affectée par les paramètres de fuseau horaire par défaut.
<?php
// Définissez le fuseau horaire par défaut sur Shanghai Time(East Huitième district)
date_default_timezone_set('Asia/Shanghai');
echo "date() Temps de sortie:" . date('Y-m-d H:i:s') . "\n"; // Sortir l'heure locale,Par exemple 2025-05-22 16:00:00
echo "gmdate() Temps de sortie:" . gmdate('Y-m-d H:i:s') . "\n"; // Sortir UTC temps,Par exemple 2025-05-22 08:00:00
?>
Ce code montre la différence entre la sortie Date () et Gmdate () , et vous devez y prêter attention lorsque vous l'utilisez.
Si votre logique d'application nécessite à la fois l'heure locale et le temps UTC, vous devez clairement distinguer les deux et ne pas être confus.
Gardez l'horodatage uniforme <br> Utilisez des horodatages ( time () ou strToTime () ) comme représentation unifiée du temps pour éviter de manipuler directement les chaînes de temps formatées.
Utilisez la classe DateTime lors de la conversion des fuseaux horaires
Les classes DateTime et DateTimeZone de PHP offrent des capacités de conversion de fuseau horaire plus puissantes et flexibles.
<?php
// Obtenez le actuel UTC temps
$utcTime = new DateTime('now', new DateTimeZone('UTC'));
// Volonté UTC temps转换为Shanghaitemps
$localTime = clone $utcTime;
$localTime->setTimezone(new DateTimeZone('Asia/Shanghai'));
echo "UTC temps:" . $utcTime->format('Y-m-d H:i:s') . "\n";
echo "Shanghaitemps:" . $localTime->format('Y-m-d H:i:s') . "\n";
?>
Cela évite non seulement la confusion entre l'utilisation de gmdate () et date () , mais permet également un contrôle clair et une conversion des fuseaux horaires.
N'utilisez pas directement la chaîne générée par gmdate () comme heure locale.
Si vous devez générer un horodatage UTC ou une chaîne de format, vous pouvez utiliser gmdate () en toute confiance.
Si vous souhaitez formater un horodatage à l'heure locale, utilisez la fonction date () et définissez le fuseau horaire correct.
<?php
function formatTimeWithTimezone(int $timestamp, string $timezone = 'Asia/Shanghai'): string {
$dt = new DateTime("@$timestamp"); // 使用temps戳创建 DateTime Objet,La valeur par défaut est UTC
$dt->setTimezone(new DateTimeZone($timezone)); // Définir le fuseau horaire cible
return $dt->format('Y-m-d H:i:s T'); // Sortir带时区缩写的temps
}
$nowTimestamp = time();
echo "当前temps(Shanghai):" . formatTimeWithTimezone($nowTimestamp, 'Asia/Shanghai') . "\n";
echo "当前temps(UTC):" . formatTimeWithTimezone($nowTimestamp, 'UTC') . "\n";
?>
Cela garantit que le temps de sortie est exact et a des informations de fuseau horaire et évite les erreurs dues à la confusion.
GMDate () Renvoie l'heure UTC et Date () renvoie l'heure du fuseau horaire par défaut actuelle.
Lors du temps de traitement, il est recommandé d'utiliser des horodatages comme format de temps unifié.
Utilisez les classes DateTime et DateTimeZone pour gérer la conversion de fuseau horaire de manière plus flexible.
Ne mélangez jamais gmdate () et date () à volonté pour éviter les erreurs causées par la confusion du fuseau horaire.
Après avoir maîtrisé ces points clés, votre traitement du temps PHP sera plus robuste, évitant la confusion du fuseau horaire lors de la sortie du temps.