I normaly use this script to allow the user choose his timezone:
<?php
///timezones functions
function get_timezones()
{
if (method_exists('DateTimeZone','listIdentifiers'))
{
$timezones = array();
$timezone_identifiers = DateTimeZone::listIdentifiers();
foreach( $timezone_identifiers as $value )
{
if ( preg_match( '/^(America|Antartica|Arctic|Asia|Atlantic|Europe|Indian|Pacific)\//', $value ) )
{
$ex=explode('/',$value);//obtain continent,city
$city = isset($ex[2])? $ex[1].' - '.$ex[2]:$ex[1];//in case a timezone has more than one
$timezones[$ex[0]][$value] = $city;
}
}
return $timezones;
}
else//old php version
{
return FALSE;
}
}
function get_select_timezones($select_name='TIMEZONE',$selected=NULL)
{
$timezones = get_timezones();
$sel.='<select id="'.$select_name.'" name="'.$select_name.'">';
foreach( $timezones as $continent=>$timezone )
{
$sel.= '<optgroup label="'.$continent.'">';
foreach( $timezone as $city=>$cityname )
{
if ($selected==$city)
{
$sel.= '<option selected=selected value="'.$city.'">'.$cityname.'</option>';
}
else $sel.= '<option value="'.$city.'">'.$cityname.'</option>';
}
$sel.= '</optgroup>';
}
$sel.='</select>';
return $sel;
}
?>
DateTimeZone::listIdentifiers
timezone_identifiers_list
(PHP 5 >= 5.2.0)
DateTimeZone::listIdentifiers -- timezone_identifiers_list — Retourne un tableau numérique de tous les fuseaux horaires
Description
Style orienté objet
public static array DateTimeZone::listIdentifiers
([ int
$what = DateTimeZone::ALL
[, string $country = NULL
]] )Style procédural
Liste de paramètres
-
what -
Une des constantes de classe DateTimeZone.
-
country -
Un code de pays en deux lettres, compatible ISO 3166-1.
Note: Cette option n'est dispoinble que lorsque le paramètre
whatprend la valeur deDateTimeZone::PER_COUNTRY.
Valeurs de retour
Retourne un tableau en cas de succès ou FALSE si une erreur survient.
Historique
| Version | Description |
|---|---|
| 5.3.0 |
Ajout des paramètres optionnels what et
country.
|
Exemples
Exemple #1 Exemple avec timezone_identifiers_list()
<?php
$timezone_identifiers = DateTimeZone::listIdentifiers();
for ($i=0; $i < 5; $i++) {
echo "$timezone_identifiers[$i]\n";
}
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
Africa/Abidjan Africa/Accra Africa/Addis_Ababa Africa/Algiers Africa/Asmara
neo22s at gmail dot com
31-Oct-2011 05:50
chema at garridodiaz dot com
19-Feb-2010 02:50
I use this time zone select:
<select id="TIMEZONE" name="TIMEZONE">
<?php
$timezone_identifiers = DateTimeZone::listIdentifiers();
foreach( $timezone_identifiers as $value ){
if ( preg_match( '/^(America|Antartica|Arctic|Asia|Atlantic|Europe|Indian|Pacific)\//', $value ) ){
$ex=explode("/",$value);//obtain continent,city
if ($continent!=$ex[0]){
if ($continent!="") echo '</optgroup>';
echo '<optgroup label="'.$ex[0].'">';
}
$city=$ex[1];
$continent=$ex[0];
echo '<option value="'.$value.'">'.$city.'</option>';
}
}
?>
</optgroup>
</select>
