2011-01-18 16 views
15

¿Cómo voy a convertir un nombre de zona horaria ("Asia/Dubai", "Europa/Andorra", etc.) en un desplazamiento GMT en horas (o incluso segundos, ya que puedo convertirlo desde allí?)PHP Timezone Name to Offset

La mayoría de las personas pregunta por el reverso, pero necesito obtener una compensación de zona horaria del nombre de la zona horaria proporcionada por GeoNames.

+0

Esto no responde directamente a su pregunta, pero puede resolver su problema. Parece que puede consultar GeoNames directamente para el desplazamiento, de esta manera: http://api.geonames.org/timezoneJSON?lat=47.01&lng=10.2 –

+0

Sí, en realidad estoy utilizando GeoNames como primario. El principal problema es que actualmente están sobrecargados, así que estoy tratando de tener una copia de seguridad para cuando lo estén. –

Respuesta

25

se puede utilizar el siguiente

<?php 

$timezone = 'Pacific/Nauru'; 
$time = new \DateTime('now', new DateTimeZone($timezone)); 
$timezoneOffset = $time->format('P'); 
?> 
+1

eche un vistazo a http://www.php.net/manual/en/function.date.php para mostrar en segundos –

+0

Funciona perfectamente al cambiar "new dateTime" a "new DateTime" y "time()" to " 'ahora'". ¡Gracias! –

19

Otra opción sería utilizar el método disponible DateTimeZone::getOffset(), que devuelve el desplazamiento en segundos para que la zona horaria en la fecha/hora especificada.

$timezone = new DateTimeZone("Europe/Andorra"); 
$offset = $timezone->getOffset(new DateTime); 
6

me gusta usar PHP Carbon:

$offset = Carbon::now('Europe/Andorra')->offsetHours;