JeuWeb - Crée ton jeu par navigateur
truc surement tout bete - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : truc surement tout bete (/showthread.php?tid=224)



truc surement tout bete - max - 17-09-2006

voila un bout de mon script:

Code PHP :
<?php 
$time
= date('H \h i \m\i\n s',$Tpsrestant);
mais quoi que vale $Tpsrestant, H = 1
impossible d'avoir H=0 meme si $Tpsrestant=0

j'avou que la je ne sui pas tout...
vous comprenez vous?


RE: truc surement tout bete - Ssin - 17-09-2006

Ca sert à quoi dans ton script ?


RE: truc surement tout bete - max - 17-09-2006

ben c'est mon compte a rebour php (que j'ai enfin terminé)
les minutes marchent, les secondes aussi mais dès que je met H ca foire et H est toujours supérieur a 0


RE: truc surement tout bete - naholyr - 17-09-2006

date() exprime une date selon un timestamp. Le timestamp est le temps écoulé depuis le 1er janvier 1970 à 00h00 GMT. Or en France nous sommes à GMT+1, donc date("d/m/Y H:iConfused", 0) renverra tout simplement "01/01/1970 01:00:00", H sera toujours positif puisqu'on est en GMT+1 (il vaudra toujours au moins 2 en Autriche par exemple).

La solution pour ce problème de "H" toujours positif, c'est d'utiliser gmdate(), et pas date(). gmdate() ne prendra pas en compte le décalage local.

Note que plutôt que d'utiliser date d'une façon détournée j'aurais fait le calcul à la main :
Code PHP :
<?php 

$t
= 437656;

$SEC = 1;
$MIN = 60*$SEC;
$HOUR = 60*$MIN;
$DAY = 24*$HOUR;

$d = floor($t/$DAY);
$h = floor(($t-$d*$DAY)/$HOUR);
$m = floor(($t-$h*$HOUR-$d*$DAY)/$MIN);
$s = floor(($t-$m*$MIN-$h*$HOUR-$d*$DAY)/$SEC);

echo
"$d jour(s), $h heure(s), $m minute(s), $s seconde(s)";

?>
Citation :5 jour(s), 1 heure(s), 34 minute(s), 16 seconde(s)
Le tout encapsulé dans une fonction pour faire plus propre
Code PHP :
<?php 
function split_time($t)
{
    $SEC = 1;
    $MIN = 60*$SEC;
    $HOUR = 60*$MIN;
    $DAY = 24*$HOUR;
    $d = floor($t/$DAY);
    $h = floor(($t-$d*$DAY)/$HOUR);
    $m = floor(($t-$h*$HOUR-$d*$DAY)/$MIN);
    $s = floor(($t-$m*$MIN-$h*$HOUR-$d*$DAY)/$SEC);
    return array($d,$m,$h,$s);
}
Code PHP :
<?php 
list($d,$h,$m,$s) = split_time($TpsRestant);
echo
"$d jour(s), $h heure(s), $m minute(s), $s seconde(s)";

Je réserve date() à l'usage pour lequel il est prévu : affichage d'une date Wink pas d'un temps (la nuance est fine et sémantique, mais je préfère m'y tenir), et je ne sais pas si j'ai forcément raison de le faire, donc c'est une question de goût je pense.


RE: truc surement tout bete - Enyrian - 17-09-2006

Salut salut !

Moi j'ai eu le même problème, bah au lieu de faire tout un truc comme naholyr, je l'ai fait à la barbare ^^

J'affiche heure - 1 et le reste normalement =)


RE: truc surement tout bete - max - 17-09-2006

merci ca march!
comme je me disai c'était tout con ^^


RE: truc surement tout bete - naholyr - 17-09-2006

Heu enfin au lieu d'afficher $heure-1 (parce que là c'est de l'horrible bidouille qui peut ne pas marcher si jamais on change le serveur de place), autant utiliser gmdate pour être indépendant de la localisation (comme je le précisais au début de mon message)


RE: truc surement tout bete - max - 17-09-2006

oui j'ai d'aileur utilisé ta métode pour cette raison
enfin jveu dire la solution gmdate, pas ta fonction de ouf ^^