2010-10-11 6 views
5

Est-il possible en PHP d'obtenir le décalage de fuseau horaire pour un emplacement donné? Par exemple. lorsqu'il est donné l'emplacement "Sydney/Australie" pour obtenir le décalage de fuseau horaire comme "+1100". Le bonus serait pour cette fonction les économies d'heure d'été (c'est-à-dire qu'il est conscient de l'heure d'été et ajuste le décalage en fonction).Obtenir un décalage de fuseau horaire pour un emplacement donné

+0

Etes-vous en train d'essayer d'afficher la date et l'heure dans un fuseau horaire donné? –

+0

Voulez-vous dire les noms officiels des fuseaux horaires, ou n'importe quel endroit dans le monde? –

+0

@david. Je stocke les UTC et je veux être capable de convertir cet horodatage à n'importe quelle heure locale. – Luke

Répondre

6

Pour afficher une date locale/heure, vous pouvez utiliser ce qui suit, où l'Europe/Berlin »serait remplacé par le fuseau horaire de l'utilisateur.

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

Je ne sais pas pourquoi vous avez besoin « +1100 » (plutôt que d'une représentation décimale) mais vous pouvez utiliser ceci:

$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 

Remplacer null avec '2010-10-01' et vous obtiendrez 1000

17

Vous pouvez utiliser 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" 
?> 
Questions connexes