Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Difference entre deux heures :(

6 réponses
Avatar
Trinita
Bonjour,

Voila le morceau de code

$diff = date ( "H:m:s", (mktime(12,0,0,1,1,1970)-mktime(6,0,0,1,1,1970)));
$diff = 07:00:00; // Resultat probalble 06:00:00
$diff = 21600 => nombre en seconde si on enleve la fonction date ....

Chercher l'erreur ....

Merci

6 réponses

Avatar
loufoque
Trinita wrote

$diff = date ( "H:m:s", (mktime(12,0,0,1,1,1970)-mktime(6,0,0,1,1,1970)));
H:m:s... c'est original. En général, on utilise plutôt H:i:s


$diff = 07:00:00; // Resultat probalble 06:00:00
Assignation non valide.


Avatar
Trinita
Oui bon j'ai fais une erreur dans la syntaxe j'ai bien mis i ....



loufoque wrote:
Trinita wrote

$diff = date ( "H:m:s",
(mktime(12,0,0,1,1,1970)-mktime(6,0,0,1,1,1970)));


H:m:s... c'est original. En général, on utilise plutôt H:i:s

$diff = 07:00:00; // Resultat probalble 06:00:00


Assignation non valide.



Avatar
Jean-Philippe
Pour moi c'est un bug des fonctions de formatage

$diff = strftime("%H:%M:%S",mktime(12,0,0,1,1,1970)-mktime(6,0,0,1,1,1970));

et

diff = strftime("%H:%M:%S",21600);

strftime génère la même erreur que date.

$diff = strftime("%H:%M:%S",mktime(20,0,0,1,1,1970)-mktime(6,0,0,1,1,1970));

donnera 15 et non pas 14 heures (!?)

Quelqu'un a-t-il la soluce?

Trinita wrote:
Bonjour,

Voila le morceau de code

$diff = date ( "H:m:s", (mktime(12,0,0,1,1,1970)-mktime(6,0,0,1,1,1970)));
$diff = 07:00:00; // Resultat probalble 06:00:00
$diff = 21600 => nombre en seconde si on enleve la fonction date ....

Chercher l'erreur ....

Merci
.


Avatar
_nop_nop_quinton_
Trinita wrote:

Bonjour,

Voila le morceau de code

$diff = date ( "H:m:s", (mktime(12,0,0,1,1,1970)-mktime(6,0,0,1,1,1970)));
$diff = 07:00:00; // Resultat probalble 06:00:00
$diff = 21600 => nombre en seconde si on enleve la fonction date ....

Chercher l'erreur ....

Merci


pour en avoir le coeur net j'ai refait ce script sur ma machine linux
avec une vieille version de php et ca marche normalement.

<?php

$diff = (mktime(12,0,0,1,1,1970)-mktime(11,0,0,1,1,1970));
printf("diff = %dn", $diff / 3600);

$diff = (mktime(12,0,0,1,1,1970)-mktime(6,0,0,1,1,1970));
printf("diff = %dn", $diff / 3600);

?>

kari.mquinton 182 :php mktime2.php
diff = 1
diff = 6



--
Posté via http://www.webatou.net/
Usenet dans votre navigateur !
Complaints-To:

Avatar
lapin.killer
Quelqu'un a-t-il la soluce?


date() reenvoie comme son nom l'indique une date, c'est à dire un
point sur une échelle de temps, pas une durée.
en l'occurence, elle renvoie l'équivalent de "premier janvier 1970,
6h00 GMT".

donc si le serveur est configuré en GMT+1, fatalement, 6h00 GMT
correspond à 7h00 GMT+1.

pour mesurer le temps entre deux date, le fait de comparer les
timestamp est effectivement la voie à suivre, mais ensuite il ne faut
surtout pas utiliser date() et faire sa propre fonction de formatagece
qui n'est pas très compliqué à partir de quelque chose dans ce genre:

$jours = floor($temps / 86400);
$heures = floor(($temps % 86400) / 3600);
$minutes = floor(($temps % 3600) / 60;
$secondes = ($temps % 60);

Avatar
Olivier Miakinen

Pour moi c'est un bug des fonctions de formatage

$diff = strftime("%H:%M:%S",mktime(12,0,0,1,1,1970)-mktime(6,0,0,1,1,1970));

et

diff = strftime("%H:%M:%S",21600);

strftime génère la même erreur que date.


Non, c'est un bug des attentes de l'utilisateur.

« strftime("%H:%M:%S",21600); » ne traduit pas 21600 secondes en
heures/minutes/secondes, mais il indique quelle heure il était 21600
secondes après le début des temps.

Or, quelle heure était-il ? Il était 6 heures du matin en temps
universel, mais 7 heures du matin en France (et 2 heures du matin dans
les pays dont le fuseau horaire est -0400). La réponse correspond bien à
la doc.

Pour que strftime (ou date) retourne une heure GMT, il faut changer de
fuseau horaire avant de l'appeler, ce qui est probablement utiliser un
marteau pilon pour écraser une mouche.

Le plus simple consiste à faire des divisions et des modulos :
(code non testé)

$secondes = mktime(12,0,0,1,1,1970)-mktime(6,0,0,1,1,1970);
$minutes = $secondes / 60;
$secondes %= 60;
$heures = $minutes / 60;
$minutes %= 60;
$jours = $heures / 24;
$heures %= 24;
printf("différence = %d jours, %02d:%02d:%02d",
$jours, $heures, $minutes, $secondes);

Ou, peut-être plus lisible :

$secondes = mktime(12,0,0,1,1,1970)-mktime(6,0,0,1,1,1970);
$minutes = $secondes / 60;
$heures = $minutes / 60;
$jours = $heures / 24;
printf("différence = %d jours, %02d:%02d:%02d",
$jours, $heures % 24, $minutes % 60, $secondes % 60);