2010-10-11 12 views
5

È possibile in PHP ottenere l'offset del fuso orario per una determinata posizione? Per esempio. quando viene data la posizione "Sydney/Australia" per ottenere l'offset del fuso orario come "+1100". Bonus sarebbe per questa funzione tenere a mente i risparmi diurni (vale a dire che è a conoscenza dell'ora legale e regola l'offset in base).Ottiene l'offset del fuso orario per una data posizione

+0

Stai cercando di visualizzare la data/ora in un determinato fuso orario? –

+0

Intendi nomi di fuso orario ufficiali o luoghi nel mondo? –

+0

@david. Sto memorizzando le UTC e voglio essere in grado di convertire il timestamp in qualsiasi ora locale. – Luke

risposta

6

Per visualizzare la data/ora locale è possibile utilizzare il seguente, dove 'Europe/Berlin' sarebbe sostituito con fuso orario dell'utente.

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

Non certo perché è necessario "1100" (piuttosto che una rappresentazione decimale), ma è possibile utilizzare questo:

$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 

Sostituire null con '2010-10-01' e avrete 1000

17

È possibile utilizzare la classe .

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