DateTimeZone::getTransitions

timezone_transitions_get

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

DateTimeZone::getTransitions -- timezone_transitions_getRetourne toutes les transitions d'un fuseau horaire

Description

Style orienté objet

public DateTimeZone::getTransitions(int $timestampBegin = PHP_INT_MIN, int $timestampEnd = PHP_INT_MAX): array|false

Style procédural

timezone_transitions_get(DateTimeZone $object, int $timestampBegin = PHP_INT_MIN, int $timestampEnd = PHP_INT_MAX): array|false

Liste de paramètres

object

Seulement en style procédural : un DateTimeZone objet retourné par timezone_open()

timestampBegin

Début du timestamp.

timestampEnd

Fin du timestamp.

Valeurs de retour

Retourne un tableau indexé numériquement des tableaux de transition en cas de succès, ou false si une erreur survient. Les objets DateTimeZone enveloppant des fuseaux de type 1 (décalage UTC) et type 2 (abréviations) ne contiennent pas des transitions et appelé cette méthode sur eux retournera false.

Si timestampBegin est fournit, la première entrée dans le tableau retourné contiendra un élément de transition au temps de timestampBegin.

Structure des tableaux de transition
Clé Type Description
ts int timestamp Unix
time string Chaîne de temps DateTimeInterface::ISO8601_EXPANDED (PHP 8.2 et ultérieur), ou DateTimeInterface::ISO8601 (PHP 8.1 et inférieur)
offset int Décalage horaire vers UTC en secondes
isdst bool Si l'heure d'été ext activée
abbr string Abréviation du fuseau horaire

Exemples

Exemple #1 Exemple avec timezone_transitions_get()

<?php
$timezone
= new DateTimeZone("Europe/London");
$transitions = $timezone->getTransitions();
print_r(array_slice($transitions, 0, 3));
?>

Résultat de l'exemple ci-dessus est similaire à :

Array
(
    [0] => Array
        (
            [ts]  => -9223372036854775808
             [time] =>  -292277022657-01-27T08:29:52+0000
             [offset] => 3600
            [isdst]  => 1
            [abbr] => BST
         )

    [1] => Array
        (
            [ts]  => -1691964000
            [time] => 1916-05-21T02:00:00+0000
            [offset]  => 3600
            [isdst] => 1
             [abbr] => BST
        )

    [2] => Array
        (
            [ts]  => -1680472800
            [time] => 1916-10-01T02:00:00+0000
            [offset]  => 0
            [isdst] => 
             [abbr] => GMT
        )

)

Exemple #2 Un exemple de timezone_transitions_get() avec timestampBegin défini

<?php
$timezone
= new DateTimeZone("Europe/London");
$transitions = $timezone->getTransitions(time());
print_r(array_slice($transitions, 0, 3));
?>

Résultat de l'exemple ci-dessus est similaire à :

Array
(
    [0] => Array
        (
            [ts] => 1654184161
            [time] => 2022-06-02T15:36:01+0000
            [offset] => 3600
            [isdst] => 1
            [abbr] => BST
        )

    [1] => Array
        (
            [ts] => 1667091600
            [time] => 2022-10-30T01:00:00+0000
            [offset] => 0
            [isdst] =>
            [abbr] => GMT
        )

    [2] => Array
        (
            [ts] => 1679792400
            [time] => 2023-03-26T01:00:00+0000
            [offset] => 3600
            [isdst] => 1
            [abbr] => BST
        )

)

add a note add a note

User Contributed Notes 4 notes

up
9
scotts
14 years ago
Getting a timezone's offset and other data at a specified point in time (now, for example) using the new PHP5.3 parameters:

<?php
$theTime
= time(); # specific date/time we're checking, in epoch seconds.

$tz = new DateTimeZone('America/Los_Angeles');
$transition = $tz->getTransitions($theTime,$theTime);

# only one array should be returned into $transition. Now get the data:
$offset = $transition[0]['offset'];
$abbr = $transition[0]['abbr'];
?>

Before PHP5.3, you'd have to loop through all of the Transitions up until the current point in time, which would be a very inefficient process.
up
4
rubo77
11 years ago
This will work  in PHP_VERSION < 5.3:

<?php
/** returns an array with two elements for spring and fall DST in a given year
*  works in PHP_VERSION < 5.3
*
* @param integer $year
* @param string $tz timezone
* @return array
**/
function getTransitionsForYear($year=null, $tz = null){
    if(!
$year) $year=date("Y");

    if (!
$tz) $tz = date_default_timezone_get();
   
$timeZone = new DateTimeZone($tz);

    if (
version_compare(PHP_VERSION, '5.3.0') >= 0) {
       
$transitions = $timeZone->getTransitions(mktime(0, 0, 0, 2, 1, $year),mktime(0, 0, 0, 11, 31, $year));
       
$index=1;
    } else {
       
// since 1980 it is regular, the 29th element is 1980-04-06
            // change this in your timezone
           
$first_regular_index=29;
           
$first_regular_year=1980;
       
$transitions = $timeZone->getTransitions();
       
$index=($year-$first_regular_year)*2+$first_regular_index;
    }
    return
array_slice($transitions, $index, 2);
}
up
1
tanguy dot pruvot at gmail dot com
11 years ago
Beware if you use getTransitions() without a minimum date, it can be slow...
up
-3
rubo77
11 years ago
This function will work in PHP < 5.3 :

/** returns an array with two elements for spring and fall DST in a given year
*
* @param integer $year
* @param string $tz timezone
* @return array
**/
function getTransitionsForYear($year=null, $tz = null){
    if(!$year) $year=date("Y");
   
    if (!$tz) $tz = date_default_timezone_get();
    $timeZone = new DateTimeZone($tz);
   
    $transitions = $timeZone->getTransitions(mktime(0, 0, 0, 1, 1, $year));
    return array_slice($transitions, 1, 2);
}
To Top