<?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);
}
?>