<?php
// Creamos el objeto instanciando la clase Timefull en la variable
$ingreso_tiempo = new Timefull;
//Llamamos a la funcion, colocando los parametros correctos
echo $ingreso_tiempo->getTime('5 hour','secs');// Resultado -> 18000 seconds
//Si no se especifica el parametro de la unidad a convertir, se autoasignara uno que por defecto son segundos
echo $ingreso_tiempo->getTime('1 hour');// Resultado -> 3600 seconds
//Es posible colocar prefijos para las unidades de tiempo y no es preciso colocar en singular o plural los mismas, un ejemplo:
echo $ingreso_tiempo->getTime('3601 mins','hour');// Resultado -> 60 hours 1 minute
//Para obtener directamente la operacion de conversion a la unidad de tiempo especificada, debera colocarse como tercer parametro el boolean 'true', aqui un ejemplo:
echo $ingreso_tiempo->getTime('3601 mins','hour',true);// Resultado -> 60.01667 hours
//Si se ingresa una unidad cuyo valor no es igual o mayor al valor que definiria la siguiente unidad a esta, la funcion traera como resultado el mismo valor sin transformarse:
//Dado que 45 segundos no es el valor que tiene un minuto entonces la funcion traera los 45 segundos ingresados
echo $ingreso_tiempo->getTime('45 secs','minutes');//Resultado-> 45 seconds;
//Si se desea obtener sin importar el valor de la unidad ingresada, el valor de la unidad a transformar, colocar como tercer parametro el boolean 'true'
echo $ingreso_tiempo->getTime('45 secs','minutes',true);//Resultado-> 0.75000 minutes
// Otros ejemplos
echo $ingreso_tiempo->getTime('4564 seconds','hours');// Resultado -> 1 hour 16 minutes 4 seconds
//Recordar que los parametros a ingresar como unidades de tiempo deben ser en ingles y estos pueden ser secs o seconds (singular o plural) para segundos, mins o minutes (singular o plural) para minutos y hour o hours (singular o plural) para horas.
/************************************************************************************************
CODIGO FUENTE DE LA CLASE
*************************************************************************************************/
class Timefull
{
public $def_return = ['s'=>'second','m'=>'minute','h'=>'hour','seconds','minutes','hours','min','sec','mins','secs'];
public $def_time;
public $def_transform;
public $time;
public $seconds;
public $minutes;
public $hours;
public $error;
private $raw;
public function getTime($time = null,$def_transform = null,$raw = false){ $this->raw = ($raw) ? true : false ;
if ($time != null){ $this->time = trim($time);
return $this->evaluateTime($def_transform);
}
}
public function evaluateTime($def_transform){ if ($this->time){ $split = str_split($this->time);
$this->time = null;
for ($i=0,$s=count($split); $i<$s;$i++){ if( is_numeric($split[$i])){ $this->time .= $split[$i];
} else if (($split[$i] == ',') || ($split[$i] == '.')) { $this->time .= str_replace(',','.',$split[$i]); } else { break;
}
}
$this->def_time = substr(implode('',$split),$i); return $this->transformTime($def_transform);
}
}
public function transformTime($def_transform){ if($def_transform){ $def_transform = (in_array($def_transform,$this->def_return)) ? $def_transform : $this->autoDef(true) ;
} else { $def_transform = $this->autoDef();
}
if ($this->error) { return $this->error; exit; } $this->def_transform = $def_transform;
$time_transform = $this->evaluateTransform();
if(is_array($time_transform['time'])){ for ($i=0,$s=count($time_transform['time']); $i<$s;$i++) { $return[] = ($time_transform['time'][$i] > 1) ? "{$time_transform['time'][$i]} {$time_transform['def'][$i]}s " : "{$time_transform['time'][$i]} {$time_transform['def'][$i]} " ; }
return implode('',$return); } else { if ($time_transform['time'] > 1 || $time_transform['time'] > 0.1){ return "{$time_transform['time']} {$time_transform['def']}s"; } else { return "{$time_transform['time']} {$time_transform['def']}"; }
}
}
public function evaluateTransform(){ if (preg_match("/\bsec(s?|ond(s?))?\b/i",$this->def_time)) { return $this->seconds(); } if (preg_match("/\bmin(s?|ute(s?))?\b/i",$this->def_time)) { return $this->minutes(); } if (preg_match("/\bhour(s?)\b/i",$this->def_time)) { return $this->hours(); } }
public function seconds($retry = false){ if ((preg_match("/\bsec(s?|ond(s?))?\b/i",$this->def_transform)) || $retry){ $this->seconds = $this->time;
return ['time'=>$this->seconds,'def'=>$this->def_return['s']];
} else { if(preg_match("/\bmin(s?|ute(s?))?\b/i",$this->def_transform)) return $this->secondsMinutes(); if(preg_match("/\bhour(s?)\b/i",$this->def_transform)) return $this->secondsHours(); }
}
public function minutes($retry = false){ if ((preg_match("/\bmin(s?|ute(s?))?\b/i",$this->def_transform)) || $retry){ $this->minutes = $this->time;
return ['time'=>$this->minutes,'def'=>$this->def_return['m']];
} else { if(preg_match("/\bsec(s?|ond(s?))?\b/i",$this->def_transform)) return $this->minutesSeconds(); if(preg_match("/\bhour(s?)\b/i",$this->def_transform)) return $this->minutesHours(); }
}
public function hours(){ if (preg_match("/\bhour(s?)\b/i",$this->def_transform)){ $this->hours = $this->time;
return ['time'=>$this->hours,'def'=>$this->def_return['h']];
} else { if(preg_match("/\bsec(s?|ond(s?))?\b/i",$this->def_transform)) return $this->hoursSeconds(); if(preg_match("/\bmin(s?|ute(s?))?\b/i",$this->def_transform)) return $this->hoursMinutes(); }
}
public function secondsMinutes(){ $time = $this->time;
if(!$this->raw){ if ($time > 59){ $this->minutes = (int)floor($time/60);
$this->seconds = (int)$time-($this->minutes*60);
if ($this->seconds == 0){ return ['time'=>$this->minutes,$this->def_return['m']];
} else { return ['time'=>[$this->minutes,$this->seconds],'def'=>[$this->def_return['m'],$this->def_return['s']]];
}
} else { return $this->seconds(true);
}
} else { $this->minutes = number_format($time/60,5,'.','');
if (substr(strstr($this->minutes,'.'),1) == 0) { $this->minutes = (int)floor($time/60);
return ['time'=>$this->minutes,'def'=>$this->def_return['m']];
} else { return ['time'=>$this->minutes,'def'=>$this->def_return['m']];
}
}
}
public function secondsHours(){ $time = $this->time;
if(!$this->raw){ if ($time > 59 && $time < 3600){ return $this->secondsMinutes();
} else if ($time > 3599){ $this->hours = (int)floor($time/3600);
$this->minutes = (int)floor(($time-($this->hours*3600))/60);
$this->seconds = (int)(($time-($this->hours*3600))-($this->minutes*60));
if($this->minutes == 0 && $this->seconds == 0){ return ['time'=>$this->hours,'def'=> $this->def_return['h']];
} else if ($this->minutes != 0 && $this->seconds == 0) { return ['time'=>[$this->hours,$this->minutes],'def'=> [$this->def_return['h'],$this->def_return['m']]];
} else if ($this->minutes == 0 && $this->seconds != 0) { return ['time'=>[$this->hours,$this->seconds],'def'=> [$this->def_return['h'],$this->def_return['s']]];
} else { return ['time'=>[$this->hours,$this->minutes,$this->seconds],'def'=> [$this->def_return['h'],$this->def_return['m'],$this->def_return['s']]];
}
} else { return $this->seconds(true);
}
} else { $this->hours = number_format($time/3600,5,'.','');
if (substr(strstr($this->hours,'.'),1) == 0) { $this->hours = (int)floor($time/3600);
return ['time'=>$this->hours,'def'=>$this->def_return['h']];
} else { return ['time'=>$this->hours,'def'=>$this->def_return['h']];
}
}
}
public function minutesSeconds(){ $time = $this->time;
if (!$this->raw){ $this->seconds = (int)($time*60);
return ['time'=>$this->seconds,'def'=>$this->def_return['s']];
} else { $this->seconds = ($time*60);
return ['time'=>$this->seconds,'def'=>$this->def_return['s']];
}
}
public function minutesHours(){ $time=$this->time;
if(!$this->raw){ if ($time > 59) { $this->hours = (int)floor($time/60);
$this->minutes = (int)floor($time-($this->hours*60));
if($this->minutes == 0){ return ['time'=>$this->hours,'def'=>$this->def_return['h']];
} else { return ['time'=>[$this->hours,$this->minutes],'def'=>[$this->def_return['h'],$this->def_return['m']]];
}
} else { return $this->minutes(true);
}
} else { $this->hours = number_format($time/60,5,'.','');
if (substr(strstr($this->hours,'.'),1) == 0) { $this->hours = (int)floor($time/60);
return ['time'=>$this->hours,'def'=>$this->def_return['h']];
} else { return ['time'=>$this->hours,'def'=>$this->def_return['h']];
}
}
}
public function hoursSeconds(){ $time = $this->time;
if(!$this->raw){ $this->seconds = (int)($time*3600);
return ['time'=>$this->seconds,'def'=>$this->def_return['s']];
} else { $this->seconds = ($time*3600);
return ['time'=>$this->seconds,'def'=>$this->def_return['s']];
}
}
public function hoursMinutes(){ $time = $this->time;
if(!$this->raw){ $this->minutes = (int)($time*60);
return ['time'=>$this->minutes,'def'=>$this->def_return['m']];
} else { $this->minutes = ($time*60);
return ['time'=>$this->minutes,'def'=>$this->def_return['m']];
}
}
public function autoDef($error = false){ if ($error) { $this->error = 'IS NOT A CORRECT VALUE TO TRANSFORM!';
} else { return 'seconds';
}
}
}