Lorsque vous utilisez PHP pour les opérations dépendant du temps, la fonction Timezone_name_get () peut être utilisée pour obtenir le nom de fuseau horaire d'un objet DateTimeZone . Cependant, dans certains cas, cette fonction peut retourner faux , ce qui fait que le programme ne traite pas correctement les informations du fuseau horaire. Cet article explorera les alternatives que les développeurs peuvent utiliser pour gérer efficacement cette situation lorsque Timezone_name_get renvoie False pour garantir la robustesse et l'exactitude du programme.
Premièrement, c'est généralement parce que l' objet DateTimeZone entrant n'a pas de nom de fuseau horaire valide , ou que l'objet n'est pas initialisé correctement. Par exemple, une erreur ou un identifiant de fuseau horaire inexistant est utilisée, ou l'instance d'objet DateTimeZone est accidentellement corrompue.
<?php
$timezone = new DateTimeZone('Invalid/Timezone');
echo timezone_name_get($timezone); // Possible de revenir false
?>
À partir de PHP 8.1, la classe DateTimeZone a ajouté une méthode getName () , qui peut obtenir directement le nom du fuseau horaire et est plus orienté objet que Timezone_Name_get () . Vous pouvez d'abord vérifier si la valeur de retour est valide, puis utiliser cette méthode.
<?php
$timezone = new DateTimeZone('Asia/Shanghai');
$name = $timezone->getName();
if ($name === false || $name === null) {
// Gérer les situations non valides
$name = 'UTC'; // Temps horaire par défaut alternatif
}
echo $name;
?>
Lors de l'instanciation d'un objet DateTimeZone , vous pouvez utiliser un mécanisme de capture d'exception pour éviter les fuseaux horaires invalides, ce qui fait que les fonctions ultérieures renvoient les erreurs.
<?php
try {
$timezone = new DateTimeZone('Invalid/Timezone');
} catch (Exception $e) {
// Utiliser le remplacement du fuseau horaire par défaut
$timezone = new DateTimeZone('UTC');
}
echo timezone_name_get($timezone);
?>
Cette méthode garantit qu'un nom de fuseau horaire valide peut être obtenu lorsque Timezone_name_get () est ensuite appelé.
Lorsque le nom de fuseau horaire ne peut pas être obtenu directement à partir de la DateTimeZone , l'abréviation ou le décalage du fuseau horaire peut être obtenu sous forme d'informations alternatives à l'aide de la fonction de formatage de l'objet DateTime .
<?php
$timezone = new DateTimeZone('Invalid/Timezone');
try {
$datetime = new DateTime('now', $timezone);
} catch (Exception $e) {
$datetime = new DateTime('now', new DateTimeZone('UTC'));
}
// Obtenez l'abréviation du fuseau horaire,Par exemple CST、PST
echo $datetime->format('T');
// Ou obtenez le décalage du fuseau horaire,Par exemple +0800
echo $datetime->format('O');
?>
Si un grand nombre de chaînes de fuseau horaire d'origine incertaine sont impliquées dans le programme, il est recommandé de maintenir un tableau de mappage de fuseau horaire à l'avance, de vérifier et de remplacer le nom de fuseau horaire non valide. Cela évite False lors de l'appel Timezone_name_get .
<?php
$validTimezones = timezone_identifiers_list();
$inputTimezone = 'Invalid/Timezone';
if (!in_array($inputTimezone, $validTimezones)) {
$inputTimezone = 'UTC'; // Définir le fuseau horaire par défaut
}
$timezone = new DateTimeZone($inputTimezone);
echo timezone_name_get($timezone);
?>
Lorsque Timezone_name_get () renvoie False , le problème le plus fondamental est que l'objet Timezone est incorrect ou que le nom du fuseau horaire n'est pas valide. Ce problème peut être évité efficacement grâce à la gestion des exceptions, à l'utilisation de nouvelles méthodes orientées objet, à la mise en forme de sortie avec DateTime et à la maintenance des listes de fuseaux horaires. Une sélection raisonnable d'alternatives basée sur des scénarios spécifiques peut améliorer la robustesse du programme et de l'expérience utilisateur.