Convertir Minutos o Segundos a fecha formateada

A veces tenemos un valor de minutos o segundos y queremos convertirlo a una cadena de tiempo formateada del tipo x horas x minutos etc. Esta clase que os voy a presentar ahora es precisamente para ello.

La clase se basa en la modificación de una clase parecida que lo que hace es dando una fecha determinada calcula el tiempo que ha pasado desde esa fecha hasta el momento actual, la clase original se puede encontrar en el post Clase para mostrar fechas al estilo “hace 1 dia 6 min” con PHP.

class haceTanto extends DateTime {

protected $strings = array(
'y' => array('1 año', '%d años'),
'm' => array('1 mes', '%d meses'),
'd' => array('1 día', '%d dias'),
'h' => array('1 hora', '%d horas'),
'i' => array('1 min', '%d minutos'),
's' => array('segundos', '%d segundos'),
);

public $profundidad;

public function __construct( $minutos,$profundidad='i'){
parent::__construct("now");
$this->sub(new DateInterval("PT{$minutos}M"));
$this->profundidad = $profundidad;

}

public function __toString() {
try{
$now = new DateTime("now");
$diff = $this->diff($now);

foreach($this->strings as $key => $value){

if( ($text .= ' '.$this->getDiffText($key, $diff)) ){

}
if($this->profundidad == $key) break;
}
return $text;
}
catch(Exception $e){
trigger_error($e->getMessage(), E_USER_ERROR);
return '';
}
}

protected function getDiffText($intervalKey, $diff){
$pluralKey = 1;
$value = $diff->$intervalKey;
if($value > 0){
if($value < 2){
$pluralKey = 0;
}
return sprintf($this->strings[$intervalKey][$pluralKey], $value);
}
return null;
}
}

Comentarios