Aller au contenu

Conversion de date


ebouilleur

Sujets conseillés

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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 ";
}

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines plus tard...

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:

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

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



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