PHP使用的美国时区列表?

时间:2011-02-14 05:48:14

标签: php timezone

我可以使用php的美国时区列表吗?我使用PHP的时区名称,如America / Anchorage,php在这里列出时区:

http://us.php.net/manual/en/timezones.others.php

我想在下拉列表中显示它们以供用户选择,但我只需要美国的那些,我不想展示一群在美国之外的人。

4 个答案:

答案 0 :(得分:77)

这是我找到的列表:

Eastern Time    America/New_York
Central Time    America/Chicago
Mountain Time   America/Denver
Mountain Time (no DST) America/Phoenix
Pacific Time    America/Los_Angeles
Alaska Time America/Anchorage
Hawaii-Aleutian America/Adak
Hawaii-Aleutian Time (no DST) Pacific/Honolulu

答案 1 :(得分:45)

如deceze所说,你可以使用PER_COUNTRY标志。

$timezone_identifiers = DateTimeZone::listIdentifiers(DateTimeZone::PER_COUNTRY, 'US');
foreach($timezone_identifiers as $timezone_identifier) {
  echo "$timezone_identifier\n";
}

输出:

America/Adak
America/Anchorage
America/Boise
America/Chicago
America/Denver
America/Detroit
America/Indiana/Indianapolis
America/Indiana/Knox
America/Indiana/Marengo
America/Indiana/Petersburg
America/Indiana/Tell_City
America/Indiana/Vevay
America/Indiana/Vincennes
America/Indiana/Winamac
America/Juneau
America/Kentucky/Louisville
America/Kentucky/Monticello
America/Los_Angeles
America/Menominee
America/Metlakatla
America/New_York
America/Nome
America/North_Dakota/Beulah
America/North_Dakota/Center
America/North_Dakota/New_Salem
America/Phoenix
America/Shiprock
America/Sitka
America/Yakutat
Pacific/Honolulu

答案 2 :(得分:5)

这会自动为您提供美国时区列表:

if (defined('DateTimeZone::AMERICA')) {
    // PHP 5.3+
    $timezoneIdentifiers = timezone_identifiers_list(DateTimeZone::AMERICA);
} else {
    // PHP 5.2
    $timezoneIdentifiers = timezone_identifiers_list();
    $timezoneIdentifiers = array_filter($timezoneIdentifiers, create_function('$tz', 'return preg_match("/^America\//", $tz);'));
}

请注意,这将包括南美,加拿大等时区。你可以使用DateTimeZone::PER_COUNTRY作为PHP {5.3}的过滤器,看看是否有你想要的,或者过滤timezone_identifiers_list的完整列表。最好的选择可能是手工挑选时区。

答案 3 :(得分:0)

使用PHP的GEOIP获取每个国家/地区所有时区的强力方式。代码不是很好看。你应该只调用一次并将结果存储在某个地方。

$timezones = array();

foreach (range('A', 'Z') as $i) {
    foreach (range('A', 'Z') as $j) {
        $country = $i . $j;

        foreach (range('A', 'Z') as $k) {
            foreach (range('A', 'Z') as $l) {
                $region = $k . $l;

                if ($timezone = geoip_time_zone_by_country_and_region($country, $region)) {
                    $timezones[$country][$timezone] = true;
                }
            }
        }

        foreach (range(0, 99) as $m) {
            if ($timezone = geoip_time_zone_by_country_and_region($country, sprintf('%02d', $m))) {
                $timezones[$country][$timezone] = true;
            }
        }
    }
}

var_dump($timezones);