DateTimeZone::listAbbreviations
timezone_abbreviations_list
(PHP 5 >= 5.2.0, PHP 7, PHP 8)
DateTimeZone::listAbbreviations -- timezone_abbreviations_list — 返回一个包含 dst (夏令时),时差和时区信息的关联数组。
说明
面向对象风格
public static DateTimeZone::listAbbreviations(): array
过程化风格
timezone_abbreviations_list(): array
返回值
成功,返回数组, 或者在失败时返回 false
。
范例
示例 #1 timezone_abbreviations_list() 函数的范例:
<?php
$timezone_abbreviations = DateTimeZone::listAbbreviations();
print_r($timezone_abbreviations["acst"]);
?>
以上例程的输出类似于:
Array ( [0] => Array ( [dst] => 1 [offset] => -14400 [timezone_id] => America/Porto_Acre ) [1] => Array ( [dst] => 1 [offset] => -14400 [timezone_id] => America/Eirunepe ) [2] => Array ( [dst] => 1 [offset] => -14400 [timezone_id] => America/Rio_Branco ) [3] => Array ( [dst] => 1 [offset] => -14400 [timezone_id] => Brazil/Acre ) )

User Contributed Notes 2 notes
jonathan at hogervorst dot info ¶
8 years ago
This method returns an associative array containing some 'major' timezones (like CEST), which on their own contain more specific 'geographic' timezones (like Europe/Amsterdam).
If you're using these timezones and their offset/DST information, it's extremely important to realize the following:
*It seems like ALL DIFFERENT OFFSET/DST CONFIGURATIONS (including historical configurations) of each timezone are included!*
For example, Europe/Amsterdam can be found six times in the output of this function. Two occurrences (offset 1172/4772) are for the Amsterdam time used until 1937; two (1200/4800) are for the time that was used between 1937 and 1940; and two (3600/4800) are for the time used since 1940.
*Therefore, YOU CANNOT RELY ON THE OFFSET/DST INFORMATION RETURNED BY THIS FUNCTION as being currently correct/in use!*
If you want to know the current offset/DST of a certain timezone, you'll have to do something like this:
<?php
$now = new DateTime(null, new DateTimeZone('Europe/Amsterdam'));
echo $now->getOffset();
?>
P.S. I'm sorry for my use of caps lock in this post, but as this behavior is not described in the documentation, I considered it to be important enough to shout. Normally I don't do such things :)
kingskippus at gmail dot com ¶
13 years ago
Note that the dst field is of boolean type, so if you are doing an identity comparison, you need to test for true or false, not 0 or 1. For example:
<?php
$timezone_abbreviations = DateTimeZone::listAbbreviations();
foreach ($timezone_abbreviations["est"] as $tz) {
echo $tz['timezone_id'];
// if ($tz['dst'] === 1) will always evaluate to false
if ($tz['dst'] === true) {
echo " (DST observed)<br />\n";
}
// Could use else here, but for illustration...
if ($tz['dst'] === false) {
echo " (DST not observed)<br />\n";
}
}
?>
备份地址:http://www.lvesu.com/blog/php/datetimezone.listabbreviations.php