2013-04-09 7 views
0

incorrect j'ai donc ce code en php:différence datetime php retour résultat

$now= new \Datetime("UTC"); 
$lv=$user->getLastVisit(); 
$interval =$lv->diff($now,true); 

print_r($interval); 
print_r("<br>".$lv->format("Y-m-d H:i:s")); 
print_r("<br>".$now->format("Y-m-d H:i:s")); 
exit(0); 

et c'est la sortie:

DateInterval Object ([y] => 0 [m] => 0 [d] => 0 [h] => 6 [i] => 59 [s] => 6 [invert] => 0 [days] => 0) 
2013-04-09 23:44:21 
2013-04-09 23:45:15 

donc le résultat de la différence est de 6 heures 59 minutes et 6 secondes! mais si je fais la différence manuellement j'ai 54 secondes !! alors quel est le problème avec cette fonction DateTime :: diff?

Edit:

c'est le var_dump ($ user-> getLastVisit());

2013-04-09 23:54:59object(DateTime)#320 (3) { ["date"]=> string(19) "2013-04-09 23:44:21" ["timezone_type"]=> int(3) ["timezone"]=> string(19) "America/Los_Angeles" } 
+0

Vos objets 'DateTime' utilisent des fuseaux horaires différents. – DaveRandom

+0

Avez-vous considéré le fuseau horaire lors du calcul de la différence manuellement? – Oswald

+0

Pouvez-vous ajouter la sortie de 'var_dump ($ user-> getLastVisit());'. Serait intéressant de voir le fuseau horaire qui est utilisé – hek2mgl

Répondre

1

La dernière connexion doit être 23:44 UTC, pas Los_Angeles. (Au moment d'écrire ces lignes, il n'est toujours pas 2013-04-09 23:44:21 à Los Angeles!)

Il semble que vous enregistriez la dernière heure de connexion dans votre base de données comme UTC, mais en tirant retour en arrière de votre base de données PHP utilise le fuseau horaire local/default, et le traiter comme .

Voir ici: http://3v4l.org/elbLY

Notez que je suis mise $now à la même heure (UTC) que vous aviez, et je suis en utilisant votre temps ainsi $lv, d'abord dans le fuseau horaire de Los_Angeles puis en UTC.

Le premier intervalle est ce que vous avez, le deuxième intervalle montre les 54 secondes correctement.

Vous devez donc corriger votre méthode $user->getLastVisit() et vous assurer qu'elle vous remettra cette date dans l'UTC, et votre diff fonctionnera.