La forme d'utilisation de base de cette fonction est la suivante:
$tz = new DateTimeZone('America/New_York');
$transitions = timezone_transitions_get($tz);
Ou abrégé comme:
$transitions = (new DateTimeZone('America/New_York'))->getTransitions();
Les transitions $ retournées sont un tableau, chaque élément est un tableau associatif contenant les champs suivants:
TS : horodatage (entier)
Temps : Temps de format ISO (String)
Offset : Offset (nombre de secondes par rapport à UTC)
ISDST : Que ce soit l'heure d'été (valeur booléenne)
ABBR : Abréviation de l'heure actuelle (comme EDT ou EST)
Notre objectif dans cet article est sur le champ TS , c'est-à-dire l'horodatage.
Dans les données retournées, TS représente le nombre de secondes depuis l'ère UNIX (00:00:00 UTC, 1er janvier 1970). C'est un entier qui peut être positif ou négatif.
Par exemple, nous obtenons et imprimons le point de temps de conversion via le code suivant:
$tz = new DateTimeZone('Europe/Paris');
$transitions = $tz->getTransitions();
foreach ($transitions as $transition) {
echo "Horodatage:{$transition['ts']},Temps correspondant:{$transition['time']}\n";
}
La sortie peut être similaire:
Horodatage:-1830384000,Temps correspondant:1916-06-14T23:00:00+0000
Horodatage:-1689814800,Temps correspondant:1916-10-01T23:00:00+0000
...
Comme on peut le voir, l'horodatage est un point temporel représenté sous une forme entière, et la valeur négative représente le temps avant 1970.
Vous pouvez utiliser la classe DateTime pour gérer cette conversion:
$timestamp = $transition['ts'];
$dt = (new DateTime())->setTimestamp($timestamp);
echo $dt->format('Y-m-d H:i:s');
Il convient de noter que l'objet DateTime créé par défaut se trouve dans le fuseau horaire actuel, et vous pouvez également le définir manuellement:
$tz = new DateTimeZone('UTC');
$dt = new DateTime("@{$timestamp}");
$dt->setTimezone($tz);
echo $dt->format('Y-m-d H:i:s T');
Nous pouvons filtrer la conversion la plus récente de la liste renvoyée par getTransitions () pour afficher les informations de temps de décalage et de lumière du jour:
$tz = new DateTimeZone('Asia/Shanghai');
$transitions = $tz->getTransitions();
$now = time();
$recent = null;
foreach ($transitions as $transition) {
if ($transition['ts'] <= $now) {
$recent = $transition;
} else {
break;
}
}
echo "Le temps de conversion le plus récent est:{$recent['time']},UTC Le décalage est:{$recent['offset']} Deuxième";
Si vous avez l'intention de retourner ces informations sous la forme d'une API Web, vous pouvez sortir JSON en utilisant la structure suivante:
header('Content-Type: application/json');
echo json_encode([
'timestamp' => $recent['ts'],
'utc_time' => $recent['time'],
'offset' => $recent['offset'],
'isdst' => $recent['isdst'],
'abbr' => $recent['abbr'],
'source' => 'https://gitbox.net/timezone/transition'
]);