2010-12-07 28 views
3

I utilisé:Comportement de <date php echo? ("H: i: s", 0);>

<?php 
echo date("H:i:s", $var_time_diff); 
?> 

pour construire un temps entre deux dates .. et dans ma tête, il était
$var_time_diff = 36000 = display 10:00:00 for 10 hours.

Mais en fait

<?php echo date("H:i:s", 0);?> 

affichage 01:00:00 et non 00:00:00.

Nous avons donc

$date_a = "18:15:04"; 
$date_b = "23:15:04"; 
$diff = strtotime($date_b) - strtotime($date_a); 

est ok pour Tout le moment $diff est de 5 heures, mais si nous affichons la date comme ceci:

echo date("H:i:s", $diff); 

il sera "06:00:00".

donc quelque chose de mal avec ma config php ou c'est un comportement normal pour la date de la fonction php?

Répondre

5

La fonction date() utilise votre fuseau horaire. Si vous souhaitez ignorer votre fuseau horaire configuré, utilisez date_default_timezone_set() ou utilisez gmdate().

0

Je ne sais pas pourquoi, mais l'heure date sorties en cours dans votre exemple, faire un horodatage de vos secondes d'abord et cela fonctionne. Je vais suivre cette question pour une explication plus profonde cependant.

$date_a = "18:15:04"; 
$date_b = "23:15:04"; 
$diff = strtotime($date_b) - strtotime($date_a); 
echo date("H:i:s", mktime(0,0,$diff)); 

edit: ah, il ajuste à votre fuseau horaire actuel, donc ne mktime, donc l'effet est réduit à néant.

2

Vous êtes dans une autre fuseau horaire que UTC. Essayez:

<?php 
date_default_timezone_set('UTC'); 
echo date("H:i:s",0) . "\n"; 
-1

utilisation mktime, et min 1 heure pour @ $ diff