Position actuelle: Accueil> Derniers articles> Combinaison timezone_identifiers_list et datetime :: setTimeZone pour modifier les fuseaux horaires de DateTime

Combinaison timezone_identifiers_list et datetime :: setTimeZone pour modifier les fuseaux horaires de DateTime

gitbox 2025-05-31

1. Comprendre le temps de temps_identifiers_list

Timezone_Identifiants_list est une fonction intégrée PHP pour obtenir tous les identificateurs de fuseau horaire disponibles. Son utilisation est très simple:

 <?php
$timezones = timezone_identifiers_list();
foreach ($timezones as $timezone) {
    echo $timezone . PHP_EOL;
}
?>

Ce code sortira tous les noms de fuseau horaires pris en charge par PHP, comme l'Asie / Shanghai , l'Europe / Londres , l'Amérique / New_york , etc.


2. Créez un objet DateTime et définissez le fuseau horaire initial

La classe DateTime peut créer un objet date et heure. Par défaut, si le fuseau horaire n'est pas spécifié, le fuseau horaire par défaut du serveur est utilisé. Nous pouvons également passer dans un objet de fuseau horaire au moment de la création.

 <?php
$date = new DateTime('2025-05-31 15:00:00', new DateTimeZone('UTC'));
echo $date->format('Y-m-d H:i:s T') . PHP_EOL;
?>

Ce code sortira: 2025-05-31 15:00:00 UTC .


3. Utilisez la méthode SetTimeZone pour modifier le fuseau horaire

Si nous voulons convertir ce qui est ci-dessus en temps Shanghai en Chine, nous pouvons le mettre en œuvre via la méthode SetTimeZone :

 <?php
$date->setTimezone(new DateTimeZone('Asia/Shanghai'));
echo $date->format('Y-m-d H:i:s T') . PHP_EOL;
?>

Le résultat de sortie deviendra: 2025-05-31 23:00:00 CST , c'est-à-dire le temps de Pékin correspondant.


4. Combinaison de fuseau horaire_identifiers_list et setTimeZone pour définir dynamiquement le fuseau horaire

Parfois, nous pourrions vouloir que l'utilisateur en sélectionne un dans la liste de tous les calendriers, et le programme ajuste ensuite l'heure en fonction de la sélection. L'exemple de code est le suivant:

 <?php
// Obtenez tous les fuseaux horaires
$timezones = timezone_identifiers_list();

// Supposons que le fuseau horaire sélectionné par l&#39;utilisateur est 'Europe/London'
$userSelectedTimezone = 'Europe/London';

// En créer un en premierUTCTempsDateTimeObjet
$date = new DateTime('2025-05-31 15:00:00', new DateTimeZone('UTC'));

// Vérifiez que le fuseau horaire sélectionné par l&#39;utilisateur est valide
if (in_array($userSelectedTimezone, $timezones)) {
    $date->setTimezone(new DateTimeZone($userSelectedTimezone));
    echo "Le temps sélectionné par l&#39;utilisateur est:" . $date->format('Y-m-d H:i:s T') . PHP_EOL;
} else {
    echo "Sélection de fuseau horaire non valide!" . PHP_EOL;
}
?>

Si le fuseau horaire saisi par l'utilisateur n'est pas valide, une erreur peut être invitée; S'il est valide, le temps ajusté sera affiché correctement.


5. Exemple complet de l'intégration

Voici un exemple complet montrant comment obtenir une liste de fuseaux horaires et convertir l'heure après la sélection des utilisateurs:

 <?php
// Obtenez tous les fuseaux horaires
$timezones = timezone_identifiers_list();

// Simuler le fuseau horaire de sélection des utilisateurs(Peut être remplacé par l&#39;entrée de formulaire)
$userSelectedTimezone = 'gitbox.net/Europe/London';

// Supprimer la partie du nom de domaine,Seuls les identificateurs de fuseau horaire sont préservés
$parsedTimezone = str_replace('gitbox.net/', '', $userSelectedTimezone);

// 创建tempsObjet,défautUTCtemps
$date = new DateTime('2025-05-31 15:00:00', new DateTimeZone('UTC'));

if (in_array($parsedTimezone, $timezones)) {
    $date->setTimezone(new DateTimeZone($parsedTimezone));
    echo "Le temps sélectionné par l&#39;utilisateur est:" . $date->format('Y-m-d H:i:s T') . PHP_EOL;
} else {
    echo "Sélection de fuseau horaire non valide!" . PHP_EOL;
}
?>

Grâce aux étapes ci-dessus, nous pouvons combiner flexiblement les méthodes Timezone_identifiers_list et DateTime :: setTimeZone pour modifier dynamiquement la date et l'heure en fonction des exigences.