date_i18n($format, $timestamp)
formatos de acordo com a localidade, mas não o fuso horário. get_date_from_gmt($datestring, $format)
formata de acordo com o fuso horário, mas não com a localidade. Para obter a formatação de acordo com o fuso horário e a localidade, estou fazendo o seguinte:
function local_date_i18n($format, $timestamp) {
$timezone_str = get_option('timezone_string') ?: 'UTC';
$timezone = new \DateTimeZone($timezone_str);
// The date in the local timezone.
$date = new \DateTime(null, $timezone);
$date->setTimestamp($timestamp);
$date_str = $date->format('Y-m-d H:i:s');
// Pretend the local date is UTC to get the timestamp
// to pass to date_i18n().
$utc_timezone = new \DateTimeZone('UTC');
$utc_date = new \DateTime($date_str, $utc_timezone);
$timestamp = $utc_date->getTimestamp();
return date_i18n($format, $timestamp, true);
}
Exemplo de programa:
$format = 'F d, Y H:i';
$timestamp = 1365186960;
$local = local_date_i18n($format, $timestamp);
$gmt = date_i18n($format, $timestamp);
echo "Local: ", $local, " UTC: ", $gmt;
Saída para o fuso horário de Los Angeles:
Local: 05 de abril de 2013 11:36 UTC: 05 de abril de 2013, 18:36