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.
date_default_timezone_get
(PHP 5 >= 5.1.0)
date_default_timezone_get — Retorna a timezone (zona de tempo) padrão usada por todas as funções de data e tempo em um script
Descrição
Em ordem de preferência, essa função retorna a timezone padrão por:
-
Lendo a timezone configurada utilizando a função date_default_timezone_set() (se existir)
-
Até o PHP 5.4.0 somente: Lendo a variável de ambiente TZ (se não estiver vazia)
-
Lendo o valor de date.timezone do ini (se configurada)
-
Até o PHP 5.4.0 somente: Perguntando ao sistema operacional (se suportado e permitido pelo SO). Isso usa um algoritmo que tenta adivinhar a timezone. De jeito nenhum isso funcionará corretamente em toda situação. Um aviso é mostrado quando esse estágio é alcançado. Não confie que ele será adivinhado corretamente, e configure date.timezone para a zona correta.
Se nenhuma das opções acima tiverem sucesso, a função date_default_timezone_get() retornará a timezone padrão UTC
Valor Retornado
Retorna uma string.
Changelog
| Versão | Descrição |
|---|---|
| 5.4.0 | A variável de ambiente TZ não é mais utilizada para adivinhar a timezone. |
| 5.4.0 | A timezone não é mais adivinhada de informações disponíveis através do sistema operacional já que a timezone adivinhada não é confiável. |
Exemplos
Exemplo #1 Lendo a timezone padrão
<?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');
}
?>
O exemplo acima irá imprimir algo similar à:
date_default_timezone_set: Europe/London date.timezone: Europe/London
Exemplo #2 Lendo a abreviação de uma timezone
<?php
date_default_timezone_set('America/Los_Angeles');
echo date_default_timezone_get() . ' => ' . date('e') . ' => ' . date('T');
?>
O exemplo acima irá imprimir:
America/Los_Angeles => America/Los_Angeles => PST
Veja Também
- date_default_timezone_set() - Configura a timezone padrão a ser utilizada por todas as funções de data e hora em um script
- Lista de Timezones Suportados
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());
?>
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
