SunshinePHP Developer Conference 2015

DateTimeZone::getTransitions

timezone_transitions_get

(PHP 5 >= 5.2.0)

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

Description

Style orienté objet

public array DateTimeZone::getTransitions ([ int $timestamp_begin [, int $timestamp_end ]] )

Style procédural

array timezone_transitions_get ( DateTimeZone $object [, int $timestamp_begin [, int $timestamp_end ]] )

Liste de paramètres

object

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

timestamp_begin

Début du timestamp.

timestamp_end

Fin du timestamp.

Valeurs de retour

Retourne un tableau numérique, contenant des tableaux associatifs avec toutes les transitions, en cas de succès ou FALSE si une erreur survient.

Historique

Version Description
5.3.0 Les paramètres optionnels timestamp_begin et timestamp_end ont été ajouté.

Exemples

Exemple #1 Exemple avec timezone_transitions_get()

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

L'exemple ci-dessus va afficher quelque chose de 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
        )

)

add a note add a note

User Contributed Notes 4 notes

up
3
scotts
4 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
2
rubo77
11 months 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
0
tanguy dot pruvot at gmail dot com
1 year ago
Beware if you use getTransitions() without a minimum date, it can be slow...
up
-1
rubo77
11 months 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