Calcul de la durée entre 2 heures

YarbY -  
kilian Messages postés 8854 Statut Modérateur -
Bonjour,

Est ce normal que date("H:i",0) donne 1:00 ??

Je cherche à faire une soustraction entre 2 heures, pour calculer une durée et j'ai un ecart de 1h. Et en effectuant des tests pour voir ou était l'erreur j'en suis arrivé à faire une difference entre 2 même heure et ça m'a renvoyé 1:00.
Donc la simplicité voudrait que je soustrait 1h mais je voudrait comprendre pourquoi date("H:i",0) donne 1:00 !!
merci d'avance

voici mon code:

$h1 = 10;
$m1 = 00;
$h2 = 12;
$m2 = 00;

$heure2 = mktime($h2,$m2);
$heure1 = mktime($h1,$m1);
$diff = $heure2 - $heure1;

$diff = date("H:i",$diff);
$t_diff = explode(":",$diff);
$duree = ($t_diff[0] * 60) + $t_diff[1];

Nico
A voir également:

1 réponse

kilian Messages postés 8854 Statut Modérateur 1 526
 
Oui j'ai déjà eu ce soucis. J'ai pas creusé l'affaire mais il semble qu'un timestamp Unix ayant pour valeur 0 peut représenter le 1er janvier 1970 à 1 heure du matin (au lieu du 1er janvier 70 à minuit).

Mais je pense que la raison est simple. Le 0 en timestamp Unix est le 01/01/1970 à minuit heure UTC.
Or nous on est en UTC + 2 (heure d'été Paris).
Et sans l'heure d'été on est en UTC +1
https://www.horlogeparlante.com/

Ce qui signifie que le 01/01/1970 à 00:00 en UTC correspond à 01/01/1970 à 01:00 heure d'hivers Paris. Donc le timestamp UNIX à 0 chez nous hors heure d'été correspond à ça (01/01/1970 à 01:00).
Bon on devrait être en heure d'été mais peut être que par défaut php l'oublie pour des trucs comme ça.

Voilà tu devrais peut être te mettre par défaut en utc avant de faire tes calculs, puis restaurer tes fuseaux après coup
https://www.php.net/manual/fr/function.date-default-timezone-set.php
http://fr2.php.net/manual/fr/function.date-default-timezone-get.php
0