略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: DateTimeZone::listAbbreviations

2024-11-14

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

过程化风格

返回值

成功,返回数组, 或者在失败时返回 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
        )

)

参见

add a noteadd a note

User Contributed Notes 2 notes

up
84
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 :)
up
-10
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";
    }
  }
?>

官方地址:https://www.php.net/manual/en/datetimezone.listabbreviations.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3