ebouilleur Posté 30 Août 2010 Posté 30 Août 2010 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.
Jeanluc Posté 30 Août 2010 Posté 30 Août 2010 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.
ebouilleur Posté 2 Septembre 2010 Auteur Posté 2 Septembre 2010 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 ";}
MrPierre Posté 16 Septembre 2010 Posté 16 Septembre 2010 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
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant