If you want users to choose their own timezones, here's some code that gets all available timezones but only uses one city for each possible value:
<?php
$timezones = DateTimeZone::listAbbreviations();
$cities = array();
foreach( $timezones as $key => $zones )
{
foreach( $zones as $id => $zone )
{
/**
* Only get timezones explicitely not part of "Others".
* @see http://www.php.net/manual/en/timezones.others.php
*/
if ( preg_match( '/^(America|Antartica|Arctic|Asia|Atlantic|Europe|Indian|Pacific)\//', $zone['timezone_id'] ) )
$cities[$zone['timezone_id']][] = $key;
}
}
// For each city, have a comma separated list of all possible timezones for that city.
foreach( $cities as $key => $value )
$cities[$key] = join( ', ', $value);
// Only keep one city (the first and also most important) for each set of possibilities.
$cities = array_unique( $cities );
// Sort by area/city name.
ksort( $cities );
?>
date_default_timezone_set
(PHP 5 >= 5.1.0)
date_default_timezone_set — Définit le décalage horaire par défaut de toutes les fonctions date/heure
Description
date_default_timezone_set() définit le décalage horaire par défaut utilisé par toutes les fonctions date/heure.
Note: Depuis PHP 5.1.0 (lorsque les fonctions date/heure ont été écrites), chaque appel à une fonction date/heure génère une E_NOTICE si le décalage horaire n'est pas valide et/ou un message E_STRICT si vous utilisez des configurations système ou la variable d'environnement TZ.
Au lieu d'utiliser cette fonction pour définir le décalage horaire par défaut dans votre script, vous pouvez également utiliser la configuration INI date.timezone.
Liste de paramètres
- timezone_identifier
-
L'identifiant de décalage horaire, comme UTC ou Europe/Lisbon. La liste des identifiants valides est disponible dans le Liste des Fuseaux Horaires Supportés.
Valeurs de retour
Cette fonction retourne FALSE si timezone_identifier n'est pas valide, TRUE sinon.
Historique
| Version | Description |
|---|---|
| 5.1.2 | La fonction commence à valider le paramètre timezone_identifier . |
date_default_timezone_set
15-Jul-2008 01:46
12-Aug-2007 01:37
@davidn at datalinktech dot com dot au
set_default_timezone() has no effect at all on how apache logs are timestamped (at least for me)
[red. that's untrue if you set the TZ env var... that will affect Apache as well - Derick]
It is however true, that all dates and times that php formats that are _not_ timestamps will be in that timezone.
Timestamps are always GMT
12-Feb-2007 04:21
The problem:
date() [function.date]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/Los_Angeles' for 'PST/-8.0/no DST' instead
Of course this is a problem that recently surfaced since PHP5. Quick fix is to set your time zone, add this line to your php code:
date_default_timezone_set("America/Los_Angeles");
21-Dec-2006 05:27
Note that there may be some unexpected side-effects that result from using either set_default_timezone() or the putenv("TZ=...") workalike for earlier PHP versions. ANY date formatted and output either by PHP or its apache host process will be unconditionally expressed in that timezone.
[red. That is only true for the putenv() hack - Derick]
This does indeed include the web server's logs and other output files and reports which by default usually do not include any indication of timezone. This has a further side-effect on log processing and analysis, obviously.
