Aller au contenu

Sujets conseillés

Posté

Bonjour,

Je rencontre un petit soucis de conversion d'un timestamp en durée lisible.

J'ai par exemple :


$temps = 5000; (valeur pris au hasard)
echo date ( "d\j G\h i\m", mktime(0, 0, $temps, 0, 0, 0)) ;

Je cherche donc a affiché une durée restant avec un évènement

Mais il y a un décalage d'un jour

En effet si $temps est de 12h, mon echo va affiché 30j 12h 00m au lieu de 0j 12h 00m

Pourquoi et comment résoudre ce petit problème?

Merci pour vos réponses.

Posté

Bonjour,

Ces fonctions ne sont pas faites pour représenter des durées, mais des dates. Pour une date, le jour varie entre 1 et 31; il ne peut pas être 0. Si tu essaies d'utiliser le jour "0", il me semble que la fonction passe au dernier jour du mois précédent (jour "0" d'avril = le 31 mars).

Peut-être qu'un autre Webmaster-Hubien aura une solution pour contourner le problème.

Jean-Luc

P.S. Va voir du côté de DateTime::diff.

Posté

Merci pour ta réponse

En fait je me suis fait une fonction qui me va bien (avec des morceaux de code pris sur google) :


function F_calcul_duree($duree_restante)
// détermine la duree de construction en fonction d'un timestamp
{
$tps_restant = $duree_restante ;
$i_restantes = $tps_restant / 60;
$H_restantes = $i_restantes / 60;
$d_restants = $H_restantes / 24;
$s_restantes = floor($tps_restant % 60);
$i_restantes = floor($i_restantes % 60);
$H_restantes = floor($H_restantes % 24);
$d_restants = floor($d_restants);
if ($d_restants > 0 ) echo $d_restants."j ";
if ($H_restantes > 0 ) echo $H_restantes."h ";
if ($i_restantes > 0 ) echo $i_restantes."m ";
}

  • 2 semaines plus tard...
Posté

Si ça peut t'aider ce petit code affiche différents moments suivant ton timestamp sauvegardé :


<?
$date = $donnees['tadate'];
$diff = time()-$date;

if($diff < 60)
$quelledate = 'Il y a '.$diff.' sec';
else if($diff < 3600)
$quelledate = 'Il y a '.round($diff/60, 0).' min';
else if($diff < 86400)
$quelledate = 'Il y a '.round($diff/3600, 0).' heures';
/*else if($diff > 10800 AND $diff < 86400)
$quelledate = 'Aujourd\'hui à '.date('H:i:s', $date);*/
else if($diff <= 86400 AND $diff < 172800)
$quelledate = 'Hier';
else if($diff <= 172800 AND $diff < 159200)
$quelledate = 'Il y a 2 jours';
else{
if(date('m', $date) == '01'){$mois = 'janvier';}
if(date('m', $date) == '02'){$mois = 'février';}
if(date('m', $date) == '03'){$mois = 'mars';}
if(date('m', $date) == '04'){$mois = 'avril';}
if(date('m', $date) == '05'){$mois = 'mai';}
if(date('m', $date) == '06'){$mois = 'juin';}
if(date('m', $date) == '07'){$mois = 'juillet';}
if(date('m', $date) == '08'){$mois = 'août';}
if(date('m', $date) == '09'){$mois = 'septembre';}
if(date('m', $date) == '10'){$mois = 'octobre';}
if(date('m', $date) == '11'){$mois = 'novembre';}
if(date('m', $date) == '12'){$mois = 'décembre';}
$quelledate = 'Le '.date('d', $date).' '.$mois;}
?>

Ces petits messages sont plus sympa que des heures brutes :smartass:

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...