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