Comunidad de diseño web y desarrollo en internet online

calcular total de horas de un rango de hora

Citar            
MensajeEscrito el 30 Mar 2011 07:55 pm
Saludos a todos :)

Espero me puedan orientar, necesito saber como sacar el rango de dos horas ej: si tengo la hora inicial 09:00 y la final 11:30, mi total seria 2 horas 1/2, ya lo intente con la funcion datediff pero solo funciona para valores de fecha, no se si se pueda entre horas... :?

de antemano gracias.... :wink:

Por langel_rr

20 de clabLevel



Genero:Masculino  

Desarollador Web

chrome
Citar            
MensajeEscrito el 30 Mar 2011 08:54 pm
pasa las fechas a tiempo unix que son los segundos transcurridos desde el 31/12/1970 00:00

con el tiempo unix es facil restar o sumar y luego pasar el resultado a tiempo normal

http://www.cristalab.com/tutoriales/fechas-con-mysql-c84136l/ en mysql es aun mas facil

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 30 Mar 2011 09:26 pm
Pues no se si exista una clase o función así pero no creo que sea muy complicado hacer una.

Código PHP :

<?php
function hourdiff($hour_1 , $hour_2 , $formated=false){
    
    $h1_explode = explode(":" , $hour_1);
    $h2_explode = explode(":" , $hour_2);

    $h1_explode[0] = (int) $h1_explode[0];
    $h1_explode[1] = (int) $h1_explode[1];
    $h2_explode[0] = (int) $h2_explode[0];
    $h2_explode[1] = (int) $h2_explode[1];
    

    $h1_to_minutes = ($h1_explode[0] * 60) + $h1_explode[1];
    $h2_to_minutes = ($h2_explode[0] * 60) + $h2_explode[1];

    
    if($h1_to_minutes > $h2_to_minutes){
    $subtraction = $h1_to_minutes - $h2_to_minutes;
    }
    else
    {
    $subtraction = $h2_to_minutes - $h1_to_minutes;
    }

    $result = $subtraction / 60;

    if(is_float($result) && $formated){
    
    $result = (string) $result;
      
    $result_explode = explode(".",$result);

    return $result_explode[0].":".(($result_explode[1]*60)/10);
    }
    else
    {
    return $result;
    }
}
?>



Y ahora para utilizar la función, lo harías de las 2 siguientes formas.


Código PHP :


//Forma 1: resultado en ínt o double, para operaciones matematicas, ej: 1 o 1.5
// El siguiente echo imprime: 2.5
echo hourdiff("9:00" , "11:30");

//Forma 2: resultado en string con formato, ej: 1:25
// El siguiente echo imprime: 2:30

echo hourdiff("9:00" , "11:30" , true);





Saludos

Por jOina

Claber

359 de clabLevel

2 tutoriales

 

Guadalajara, Mexico

firefox
Citar            
MensajeEscrito el 30 Mar 2011 11:04 pm
Una ve mas agradezco su ayuda y el que me contestaran ^^ , y como este foro es para que todos aprendamos de todos, les comparto esto.

encontré una función que te hace esto desde mysql se llama TIMEDIFF. esta es la sintaxis

Código MySQL :

SELECT TIMEDIFF('11:30','09:00');


se pasa primero el paramento de la ultima hora y después el de la primera hora, lo que da como resultado 02:30:00 que es el total de hrs transcurridas en ese periodo.

Nuevamente gracias y espero y este aporte y el de las personas que me contestaron, puedan orientar a mas personas :wink:

Por langel_rr

20 de clabLevel



Genero:Masculino  

Desarollador Web

chrome
Citar            
MensajeEscrito el 30 Mar 2011 11:19 pm
Ajas, buena bola.

Saludos!

Por jOina

Claber

359 de clabLevel

2 tutoriales

 

Guadalajara, Mexico

firefox
Citar            
MensajeEscrito el 04 Nov 2011 01:07 am
Hola, como puedo hacer para que colocando el valor de un campo de texto de la hora inicial y la hora final me calcule la cantidad de horas y me imprima el resultado en otro campo de texto intente esto pero no me funciona

<?php
function hourdiff($hour_1 , $hour_2 , $formated=false){

$h1_explode = explode(":" , $hour_1);
$h2_explode = explode(":" , $hour_2);

$h1_explode[0] = (int) $h1_explode[0];
$h1_explode[1] = (int) $h1_explode[1];
$h2_explode[0] = (int) $h2_explode[0];
$h2_explode[1] = (int) $h2_explode[1];


$h1_to_minutes = ($h1_explode[0] * 60) + $h1_explode[1];
$h2_to_minutes = ($h2_explode[0] * 60) + $h2_explode[1];


if($h1_to_minutes > $h2_to_minutes){
$subtraction = $h1_to_minutes - $h2_to_minutes;
}
else
{
$subtraction = $h2_to_minutes - $h1_to_minutes;
}

$result = $subtraction / 60;

if(is_float($result) && $formated){

$result = (string) $result;

$result_explode = explode(".",$result);

return $result_explode[0].":".(($result_explode[1]*60)/10);
}
else
{
return $result;
}
}
?>
<input name="Duracion_total" type="text" id="Duracion_total" size="5"
?>"
$dato1=$_POST['Hora_inicial'];
$dato2= $_POST['Hora_final'];
echo hourdiff($dato1, $dato2 , true);?>"
/>

Por anny.vargas

1 de clabLevel



 

chrome
Citar            
MensajeEscrito el 04 Nov 2011 12:12 pm
¿Qué es lo que no funciona?.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 04 Nov 2011 12:36 pm
no me reconoce los campos de texto esta parte

$dato1=$_POST['Hora_inicial'];
$dato2= $_POST['Hora_final'];

Por anny.vargas

1 de clabLevel



 

chrome
Citar            
MensajeEscrito el 04 Nov 2011 04:30 pm
Pues no hay ningún campo de texto que tenga como name "Hora_inicial" ni "Hora_final".

Si tu intención es que el usuario al teclear una hora en alguno de esos campos de texto inmediatamente le calcule el resultado en el tercer campo de texto, no es PHP lo que debes usar, sino JavaScript.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 04 Nov 2011 04:35 pm
y con javascript puedo llamar la fucion de php? ya lo intente y tampoco me dio, gracias

Por anny.vargas

1 de clabLevel



 

chrome
Citar            
MensajeEscrito el 04 Nov 2011 05:23 pm
JavaScript no ejecuta PHP (parece que no entiendes el concepto de cliente-servidor). Lo que necesites hacer, debes hacerlo en puro JavaScript.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 28 Dic 2011 12:34 am
En el caso de que el tiempo pase las 00:00 horas o que sean mas de 24 horas las que hay que calcular como se podria adaptar el codigo???

Por lumimdp

0 de clabLevel



 

chrome
Citar            
MensajeEscrito el 28 Dic 2011 03:39 pm
Necesitas incluir la fecha en el cálculo. Por eso es mejor usar la fecha tipo Epoc (la que mencionó Inyaka más arriba). Al traspasar todo a segundos, todo se resume a hacer una resta y luego volver al formato "humano".

Por DriverOp

Claber

2510 de clabLevel



 

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.