settimezone - Lista de zonas horarias de EE. UU. Para utilizar PHP?
timezone laravel (4)
Aquí hay una lista que encontré:
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
¿Hay solo una lista de zonas horarias para Estados Unidos que puedo usar con php? Estoy usando los nombres de la zona horaria de php como America / Anchorage, php enumera los husos horarios aquí:
http://us.php.net/manual/en/timezones.others.php
Quiero mostrarlos en un menú desplegable para que los seleccione el usuario, pero solo los necesito para los EE. UU., No quiero mostrar un grupo que se encuentre fuera de los EE. UU.
Como dijo deceze, puedes usar el indicador PER_COUNTRY.
$timezone_identifiers = DateTimeZone::listIdentifiers(DateTimeZone::PER_COUNTRY, ''US'');
foreach($timezone_identifiers as $timezone_identifier) {
echo "$timezone_identifier/n";
}
Salida:
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
Esto te dará automáticamente una lista de las zonas horarias estadounidenses:
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);''));
}
Tenga en cuenta que esto incluirá también las zonas horarias de Sudamérica, Canadá, etc. Podrías jugar con DateTimeZone::PER_COUNTRY
como un filtro para timezone_identifiers_list
para PHP 5.3 y ver si eso te da el deseo que deseas, o filtrar la lista completa para US/
. La mejor opción es, probablemente, seleccionar manualmente las zonas horarias.
Manera de fuerza bruta para obtener TODAS las zonas horarias por país utilizando GEOIP de PHP. El código no está diseñado para verse bien. Debería llamar esto solo una vez y almacenar el resultado en alguna parte.
$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);