2010-05-23 6 views
1

J'ai un nom de fuseau horaire et je veux que le nom du fuseau horaire double son décalage.Offset Timezone offset

Par exemple, l'Asie/Dubaï est +4, je veux inverser cette tendance à -4 ... et l'avoir résolu de EDT

Langue: PHP

Voici un échantillon de ce qu'il regarderait comme:

$timezone = "Asia/Dubai" 
$offset = $timezone->getOffset(); 
$offset 0 - $offset; 
$timezone = $offset->getTimeZone(); 

sortie: EDT

+1

Sorte d'une chose étrange à faire ... puis-je demander pourquoi? Et aussi, comment voulez-vous gérer les offsets supérieurs à ± 6? Est-ce que le décalage devrait être doublé, puis ajouté ou soustrait pour revenir à un fuseau horaire réel? –

+0

Eh bien, j'avais une mauvaise logique. J'ai vraiment besoin d'inverser le décalage, donc +4 devient -4. Lors de l'affichage des dates, nous ajoutons 4 pour localiser, lors de la recherche, nous soustrayons la date pour tenir compte des dates localisées. C'est ainsi que ça fonctionne actuellement, ne me blâmez pas. – HyderA

+0

Pouvez-vous donner un exemple? Ceci est probablement une conversion ponctuelle, donc la vitesse n'est pas le facteur principal? – VolkerK

Répondre

0

(PHP 5> = 5.2.0)

Pour obtenir le décalage par rapport à UTC

<?php 
$offUTC = new DateTime('now', new DateTimeZone('Asia/Dubai')); 

echo $offUTC->getOffset(); // in seconds 
echo ($offUTC->getOffset()/3600); // in hours 
?> 

Pour obtenir la différence de temps entre deux zones arbitraires

<?php 
$timezoneDubai = new DateTimeZone("Asia/Dubai"); 
$timezoneEDT = new DateTimeZone("America/New_York"); // note EDT may work, support is not clear 

$datetimeDubai= new DateTime("now", $timezoneDubai); 
$datetimeEDT = new DateTime("now", $timezoneEDT); 

$timeOffset = $datetimeEDT->getOffset($datetimeDubai); 

echo $timeOffset; // in seconds 
echo ($timeOffset/3600) // in hours 
?> 

Je ne suis pas sûr à 100% ce que votre objectif est, mais cela devrait vous aider. Sentez-vous également libre de vérifier plus de fonctions DateTime ici: