<?php
/** Affiche un temps ecrit joliment.
Se base sur la fonction de traduction __() avec les elements dans la table de traduction, 49 a 62.
Cf mon blog : http://blog.salagir.com/100-fonctions-temporelles-2-le-retour/
\param $secondes (int) nombre de secondes.
\param $detail peut etre :
- un booleen (oui on affiche tous les details)
- ou les strings suivant: 'h' (detail a l'heure pres), 'mn' (detail a la minute pres)
- ou bien un int: le nombre d'infos. 1 est identique a false
\return (string)
*/
function super_write_delay($secondes, $detail=true) {
if ($secondes<60) {
if ($detail==='h') return __(49);
if ($detail==='mn') return __(50);
return _s_w_d($secondes, 51, 52);
}
if ($secondes<3600) {
if ($detail==='h') return __(49);
if ($detail===false or $detail==='mn' or $detail===1) return _s_w_d($secondes/60, 53, 54);
return _s_w_d2($secondes, 'MS');
}
if ($secondes<86400) {
if ($detail===false or $detail==='h' or $detail===1) return _s_w_d($secondes/3600, 56, 57);
if ($detail==='mn' or $detail===2) return _s_w_d2($secondes, 'HM');
return _s_w_d2($secondes, 'HMS');
}
if ($detail===false or $detail===1) return _s_w_d($secondes/86400, 58, 59);
// %e et %d donnent 1 jour de base puisque c'est le *1* janvier 1970
// Donc enlever un jour puisqu'on compte du temps ici
$secondes -= 86400;
if ($detail==='h' or $detail===2) return _s_w_d2($secondes, 'JH');
if ($detail==='mn' or $detail===3) return _s_w_d2($secondes, 'JHM');
return _s_w_d2($secondes, 'JHMS');
}
function _s_w_d($nbre, $quoi, $quoi_singulier) {
$nbre = round($nbre);
if ($nbre<=1 && $quoi_singulier) return __($quoi_singulier);
return sprintf(__($quoi), $nbre);
}
//! \els: donnez parmis J H M S
function _s_w_d2($secondes, $els) {
static $temps = array('J'=>0, 'H'=>62, 'M'=>61, 'S'=>60);
$str=array();
for($i=0; $i<strlen($els); $i++) {
$el = $els{$i};
if ($el=='J') // if 1 jour alors 59, sinon 58 (si un jour, alors nbre de seconde qd meme inf a 1 jour car on a enleve un jour avant)
$str[] = ($secondes<86400)? __(59) : str_replace('%d', '%e',__(58));
else
$str[] = __($temps[$el]);
}
$str = implode(", ", $str);
if ($secondes>2600000) { // bientot un mois (janv a 31 jours)
$JOURS = floor($secondes/86400);
$str = str_replace('%d', $JOURS, $str);
$secondes -= $JOURS*86400;
}
return gmstrftime($str, $secondes);
}
?>