2010-10-11 9 views
5

¿Es posible en PHP obtener la compensación de zona horaria para una ubicación determinada? P.ej. cuando se le da la ubicación "Sydney/Australia" para obtener el desplazamiento de la zona horaria como "+1100". La bonificación sería para esta función, tenga en cuenta los ahorros de luz diurna (es decir, tenga en cuenta los ahorros de luz diurna y ajuste la compensación de acuerdo con esto).Obtener compensación de zona horaria para una ubicación determinada

+0

¿Está tratando de mostrar la fecha/hora en una zona horaria determinada? –

+0

¿Te refieres a los nombres de zona horaria oficiales o a cualquier ubicación del mundo? –

+0

@david. Estoy almacenando UTC's y quiero poder convertir esa marca de tiempo a cualquier hora local. – Luke

Respuesta

6

Para mostrar una fecha local/hora se puede utilizar el siguiente, donde 'Europa/Berlín' sería reemplazada con la zona horaria del usuario.

$date = new DateTime($value); 
$date->setTimezone(new DateTimeZone('Europe/Berlin')); 
echo $date->format('Y-m-d H:i:s'); 
3

No estoy seguro de por qué es necesario "1100" (en lugar de una representación decimal) pero se puede usar esto:

$dt = new DateTime(null, new DateTimeZone('Australia/Sydney')); 
$offset = $dt->getOffset()/60/60; // 11 

$hours = intval($offset); 
$minutes = str_pad((string)($offset - $hours) * 60, 2, '0', STR_PAD_RIGHT); 
echo $hours.$minutes; // 1100 

Reemplazar null con '2010-10-01' y obtendrá 1000

17

Se puede utilizar la clase .

<?php 
$timezone = new DateTimeZone("Australia/Sydney"); 
$offset = $timezone->getOffset(new DateTime("now")); // Offset in seconds 
echo ($offset < 0 ? '-' : '+').round($offset/3600).'00'; // prints "+1100" 
?> 
Cuestiones relacionadas