©
This document uses PHP Chinese website manual Release
(PHP 5 >= 5.2.0, PHP 7)
DateTimeZone::getTransitions -- timezone_transitions_get — Returns all transitions for the timezone
面向对象风格
$timestamp_begin
[, int $timestamp_end
]] )过程化风格
$object
[, int $timestamp_begin
[, int $timestamp_end
]] )
object
仅过程化风格:由 timezone_open() 返回的 DateTimeZone 对象。
timestamp_begin
Begin timestamp.
timestamp_end
End timestamp.
Returns numerically indexed array containing associative array with all
transitions on success 或者在失败时返回 FALSE
.
版本 | 说明 |
---|---|
5.3.0 |
The optional timestamp_begin and timestamp_end
were added.
|
Example #1 A timezone_transitions_get() example
<?php
$timezone = new DateTimeZone ( "Europe/London" );
$transitions = $timezone -> getTransitions ();
print_r ( array_slice ( $transitions , 0 , 3 ));
?>
以上例程的输出类似于:
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 ))
[#1] rubo77 [2013-11-14 17:06:46]
This will work in PHP_VERSION < 5.3:
<?php
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);
}
[#2] rubo77 [2013-11-14 05:04:44]
This function will work in PHP < 5.3 :
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);
}
[#3] tanguy dot pruvot at gmail dot com [2013-08-05 13:38:34]
Beware if you use getTransitions() without a minimum date, it can be slow...
[#4] scotts [2010-03-05 11:19:18]
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.