Las funciones para obtener las horas minutos y segundos de una hora HH:MM:SS,sss son respectivamente:
- nhoras($f) que es substr($f,0,2).
- nminutos($f) que es substr($f,3,2).
- nsegundos($f) que es substr($f,6).
- intval me asegura que días sea integer
Para pasar la hora a segundos se efectúa
$segtot = $horas*3600+$min*60+$seg;
Para pasar los segundos a hora es la función
segtohora($S): explicada en el código.
En todos los casos se hace un cast a string porque si floor actúa sobre float trunca mal por
los decimales, string lo "castea" a int.
La hora actual:
$ahora = date("H").":".date("i").":".date("s");
function nhoras($f) {
return substr($f,0,2);
}
function nminutos($f) {
return substr($f,3,2) ;
}
function nsegundos($f) {
return substr($f,6);
}
function segtohora($s){
if ($s>86399){ //más de 86.399 seg es un día (24hs)
return NULL;
}else{
$h=floor((string)$s/3600); // al dividir por 3600 (seg de una hora)
if (strlen($h)==1){ // si solo tiene 1 dígito le antepone un 0
$hc= "0".$h;
}else{
$hc= $h;
}
$m = floor((string)(($s - ($h * 3600)) / 60)); // le resta los seg de la hora y divide por 60 da m
if (strlen($m)==1){ // si solo tiene 1 dígito le antepone un 0
$mc= "0".$m;
}else{
$mc= $m;
}
$seg = $s - ($h * 3600) - ($m * 60); // le resta los seg de la hora y min da segs.
if (strlen($seg)==1){ // si solo tiene 1 dígito le antepone un 0
$sc= "0".$seg;
}else{
$sc= $seg;
}
$ti = $hc.":".$mc.":".$sc; // arma hh:mm:ss
return $ti;
}
}
$ahora = date("H").":".date("i").":".date("s"); //hora de 00 a 23