In my case, I'm not sure I can guess the correct timezone any better than PHP and it's no where near important enough to nag the user, so...
<?php
// Suppress DateTime warnings
date_default_timezone_set(@date_default_timezone_get());
?>
date_default_timezone_get
(PHP 5 >= 5.1.0)
date_default_timezone_get — Obtiene la zona horaria predeterminada usada por todas las funciones de fecha/hora en un script
Descripción
En orden de preferencia, esta función devuelve la zona horaria predeternimada mediante:
-
Leer la zona horaria usando la función date_default_timezone_set() (si hay alguna)
-
Sólo antes de PHP 5.4.0: Leer la variable de entorno TZ (si no está vacía)
-
Leer el valor de la opción ini date.timezone (si está establecida)
-
Sólo antes de PHP 5.4.0: Preguntar al sistema operativo (siempre que el SO lo soporte y lo permita). Utiliza un algoritmo que debe estimar la zona horaria. No funcionará de forma necesariamente correcta en todas las situaciones posibles. Si se diera este caso, se mostrará una alerta. No se aconseja depender de esta función. En su lugar, debe establecerse la zona horaria correcta con date.timezone
Si nada de lo de arriba sucedió, date_default_timezone_get() devolverá una zona horaria predeterminada de UTC.
Valores devueltos
Devuelve un string.
Historial de cambios
| Versión | Descripción |
|---|---|
| 5.4.0 | La variable de entorno TZ ya no se usa para adivinar la zona horaria. |
| 5.4.0 | La zona horaria ya no se adivina de la información disponible a través del sistema operativo, la zona horaria adivinada no puede invocarse. |
Ejemplos
Ejemplo #1 Obtener la zona horaria por defecto
<?php
date_default_timezone_set('Europe/London');
if (date_default_timezone_get()) {
echo 'date_default_timezone_set: ' . date_default_timezone_get() . '<br />';
}
if (ini_get('date.timezone')) {
echo 'date.timezone: ' . ini_get('date.timezone');
}
?>
El resultado del ejemplo sería algo similar a:
date_default_timezone_set: Europe/London date.timezone: Europe/London
Ejemplo #2 Obtener la abreviatura de una zona horaria
<?php
date_default_timezone_set('America/Los_Angeles');
echo date_default_timezone_get() . ' => ' . date('e') . ' => ' . date('T');
?>
El resultado del ejemplo sería:
America/Los_Angeles => America/Los_Angeles => PST
Ver también
- date_default_timezone_set() - Establece la zona horaria predeterminada usada por todas las funciones de fecha/hora en un script
- Listado de zonas horarias soportadas
To get offset string from offset:
<?php
function timezone_offset_string( $offset )
{
return sprintf( "%s%02d:%02d", ( $offset >= 0 ) ? '+' : '-', abs( $offset / 3600 ), abs( $offset % 3600 ) );
}
$offset = timezone_offset_get( new DateTimeZone( 'Pacific/Kiritimati' ), new DateTime() );
echo "offset: " . timezone_offset_string( $offset ) . "\n";
$offset = timezone_offset_get( new DateTimeZone( 'Pacific/Tahiti' ), new DateTime() );
echo "offset: " . timezone_offset_string( $offset ) . "\n";
?>
Output:
offset: +14:00
offset: -10:00
If you want to get the abbrivation (3 or 4 letter), instead of the long timezone string you can use date('T') function like this:
Input:
date_default_timezone_set('America/Los_Angeles');
echo date_default_timezone_get();
echo ' => '.date('e');
echo ' => '.date('T');
Output:
America/Los_Angeles => America/Los_Angeles => PST
date_default_timezone_get() will still emit a warning in E_STRICT if the timezone is not set; either by date_default_timezone_set() or the ini option of date.timezone.
This is probably not a big deal, but I thought I would contribute what I found.
