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:i", 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 :
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);
}