GMDate () et Date () peuvent formater des horodatages en chaînes lisibles, mais il y a une différence clé:
GMDate () est basé sur l'heure standard de Greenwich (GMT / UTC) et ne considère pas le décalage du fuseau horaire.
Date () Formera l'heure en fonction du fuseau horaire par défaut configuré par PHP (ou du fuseau horaire défini par date_default_timezone_set () ).
Par exemple:
echo gmdate('Y-m-d H:i:s', time()); // Sortir:2025-05-25 08:00:00(UTCtemps)
echo date('Y-m-d H:i:s', time()); // Sortir:2025-05-25 16:00:00(Supposons que le fuseau horaire est Asia/Shanghai)
Dans certaines entreprises, nous devons effectuer des conversions précises entre le temps de fuseau horaire et le temps UTC, en particulier dans les systèmes commerciaux multinationaux, où l'UTC est utilisé pour stocker les données uniformément et l'afficher en temps local. À l'heure actuelle, la coordination entre gmdate () et date () devient particulièrement importante.
En supposant que l'utilisateur entre "2025-05-25 16:00:00", nous devons le convertir en horodatage UTC pour le stockage:
date_default_timezone_set('Asia/Shanghai');
$local_time = '2025-05-25 16:00:00';
$timestamp = strtotime($local_time); // 本地temps的temps戳
$utc_time = gmdate('Y-m-d H:i:s', $timestamp);
echo $utc_time; // Sortir:2025-05-25 08:00:00
Si nous devons envoyer ce temps UTC à l'API:
$url = 'https://gitbox.net/api/sync?time=' . urlencode($utc_time);
En supposant que le temps lu dans la base de données est au format UTC, nous voulons afficher l'heure comme le fuseau horaire où se trouve l'utilisateur:
date_default_timezone_set('Asia/Shanghai');
$utc_timestamp = strtotime('2025-05-25 08:00:00');
$local_time = date('Y-m-d H:i:s', $utc_timestamp);
echo $local_time; // Sortir:2025-05-25 16:00:00
Cette méthode convient à l'affichage du journal, à l'affichage de la chronologie et à d'autres fonctions.
Lorsque vous développez un système distribué, vous pouvez utiliser gmdate () pour assurer la cohérence de toutes les données de temps. Par exemple, journalisation des journaux de serveur:
$log = '[' . gmdate('Y-m-d H:i:s') . '] Task started' . PHP_EOL;
file_put_contents('/var/logs/task.log', $log, FILE_APPEND);
Tous les serveurs peuvent être alignés quel que soit le fuseau horaire dans lequel ils se trouvent.
Si vous avez besoin d'obtenir un horodatage UTC à point zéro d'une certaine journée (couramment utilisé pour les tâches statistiques):
date_default_timezone_set('UTC');
$timestamp = strtotime('2025-05-25 00:00:00');
echo $timestamp; // Sortir:1748131200
Si vous souhaitez construire une demande d'API:
$url = 'https://gitbox.net/report?start=' . $timestamp;
Clarifiez toujours les paramètres du fuseau horaire actuels et utilisez date_default_timezone_get () pour afficher le fuseau horaire actuel.
Avant d'utiliser gmdate () et date (), vous devez être clair sur la sémantique de l'heure cible: est-ce l'heure locale de l'utilisateur ou l'heure unifiée du système?
Il est recommandé d'utiliser Date () pour les temps visibles par l'utilisateur et d'utiliser gmdate () pour le stockage interne ou la synchronisation du système.