2012-12-18 4 views
3

Dans le code ci-dessous, je dois obtenir unixtimestamp pour le fuseau horaire de 2 pays. La sortie du code me donnera une date avec différence mais l'horodatage ne sera pas différent l'un de l'autre. Il reste même. Quelqu'un peut-il donner une solution pour obtenir un horodatage différent pour différents fuseaux horaires? Merci d'avance.Horodatage pour différents fuseaux horaires en php

date_default_timezone_set('Asia/Calcutta'); 
echo date("Y-m-d H:i:s")."<br/>"; //2012-12-18 12:12:12 
echo strtotime(date("Y-m-d H:i:s",time()))."<br/>"; //1355812934 

date_default_timezone_set('Europe/London'); 
echo date("Y-m-d H:i:s")."<br/>"; //2012-12-18 06:12:12 
echo strtotime(date("Y-m-d H:i:s",time()))."<br/>"; //1355812934 
+0

est continue, il n'a rien à voir avec les fuseaux horaires et toujours les mêmes dans tous les endroits sur la planète. – zerkms

+1

"Quelqu'un peut-il donner une solution pour obtenir un horodatage différent pour différents fuseaux horaires?" --- C'est une mauvaise question. Quelle est votre tâche ** originale **? – zerkms

+0

J'ai besoin de montrer le temps serveur en utilisant php unixtimestamp avec javascript (n'utilisant aucune requête ajax) basé sur différents fuseaux horaires. – shyammtp

Répondre

3

Vous pouvez obtenir le décalage de fuseau horaire en secondes en utilisant date("Z"). Et puis calculez comme vous avez besoin.

date_default_timezone_set('Asia/Calcutta'); 
echo 'Local time : '.date("r").'<br>'; // local time 
echo 'Offset : '.date("Z").'<br>'; // time zone offset from UTC in seconds 
echo 'UTC Time : '.date('r', strtotime(date("r")) + (date("Z")*-1)); echo '<br><br>'; // this is UTC time converted from Local time 

date_default_timezone_set('Europe/London'); 
echo 'Local time : '.date("r").'<br>'; // local time 
echo 'Offset : '.date("Z").'<br>'; // time zone offset from UTC in seconds 
echo 'UTC time : '.date('r', strtotime(date("r")) + (date("Z")*-1)); echo '<br><br>'; // this is utc time converted from Local time 

Sortie:

Local time : Tue, 18 Dec 2012 10:53:07 +0530 
Offset : 19800 
UTC Time : Tue, 18 Dec 2012 05:23:07 +0530 

Local time : Tue, 18 Dec 2012 05:23:07 +0000 
Offset : 0 
UTC time : Tue, 18 Dec 2012 05:23:07 +0000 
+0

Merci j'ai eu exactement ce dont j'avais besoin ... :-) – shyammtp

+0

[PHP timezones] (https://secure.php.net/manual/en/timezones.php) –

2

Cela devrait fonctionner, j'ai changé votre façon originale d'utiliser la classe php DataTimeZone. Donnez cette solution, il devrait être facile à suivre:

$dateTimeZoneCalcutta = new DateTimeZone("Asia/Calcutta"); 
$dateTimeCalcutta = new DateTime("now", $dateTimeZoneCalcutta); 
$calcuttaOffset = $dateTimeZoneCalcutta->getOffset($dateTimeCalcutta); 
$calcuttaDateTime = date("Y-m-d H:i:s", time() + $calcuttaOffset); 

echo 'Local Server Time: ' . date("Y-m-d H:i:s", time()) . '<br />'; 
echo 'Calcutta Time: ' . $calcuttaDateTime . '<br />'; 
echo 'Calcutta Timestamp: ' . strtotime($calcuttaDateTime) . '<br />'; 
echo '<br /><br />'; 

$dateTimeZoneLondon = new DateTimeZone("Europe/London"); 
$dateTimeLondon = new DateTime("now", $dateTimeZoneLondon); 
$londonOffset = $dateTimeZoneLondon->getOffset($dateTimeLondon); 
$londonDateTime = date("Y-m-d H:i:s", time() + $londonOffset); 

echo 'Local Server Time: ' . date("Y-m-d H:i:s", time()) . '<br />'; 
echo 'London Time: ' . $londonDateTime . '<br />'; 
echo 'London Timestamp: ' . strtotime($londonDateTime) . '<br />'; 
horodatage
+0

Fondamentalement, cela devrait avoir besoin (PHP 5> = 5.2. 0). Merci pour votre solution. – shyammtp

+0

@shyammtp Pas de problème J'aurais dû le mentionner dans ma réponse – PhearOfRayne

Questions connexes