Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Problema con cálculo de tiempo

Estas en el tema de Problema con cálculo de tiempo en el foro de Javascript en Foros del Web. Hola, tengo un problemilla con una operación. Tengo un formulario en el cual quiero calcular la estancia de un producto pero sin contar el tiempo ...
  #1 (permalink)  
Antiguo 04/05/2015, 00:56
 
Fecha de Ingreso: diciembre-2014
Mensajes: 13
Antigüedad: 9 años, 4 meses
Puntos: 0
Problema con cálculo de tiempo

Hola, tengo un problemilla con una operación. Tengo un formulario en el cual quiero calcular la estancia de un producto pero sin contar el tiempo que tardan en autorizarme, para ello introduzco una fecha y hora de recogida y una fecha y hora de entrega. Despues introduzco una segunda fecha y hora de inicio y de entrega, que es el tiempo que tardan desde que les pido autorizacion hasta que me la dan. Pues bien, yo se hacer un calculo directo, es decir, calculo la diferencia de horas entre fecha de inicio y de entrega y las horas trascurridas en el presupuesto. Pero a la hora de calcular la diferencia entre ambas para saber el total de horas solo se hacer una resta normal, por lo que cuando transcurre más de un día el resultado me da negativo. ¿Como puedo hacer que esa operación me calcule los dias transcurridos? Gracias y perdonar por el tocho.

Formulario:

<table width="72%" border="3" cellspacing="2" cellpadding="10">
<tr>
<td width="23%">Fecha De Recogida:</td>
<td width="25%"><input type="date" name="fecha1" id="fecha1" /></td>
<td width="28%">Hora De Recogida:</td>
<td width="24%" colspan="2"><input type="time" name="hora1" id="hora1" /></td>
</tr>
<tr>
<td>Fecha De Entrega</td>
<td><input type="date" name="fecha2" id="fecha2" /></td>
<td>Hora Entrega </td>
<td colspan="2"><input type="time" name="hora2" id="hora2" /></td>
</tr>
<tr>
<td><button type="button" onClick="interval_date();">Calcular Estancia</button></td>
<td>Resultado:</td>
<td><input name="text" type="text" name:"resultado" id="resultado" /></td>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<td>Fecha De Inicio Presupuesto: </td>
<td><input type="date" name="fecha3" id="fecha3" /></td>
<td>Hora De Inicio Presupuesto: </td>
<td colspan="2"><input type="time" name="hora3" id="hora3" /></td>
</tr>
<tr>
<td>:Fecha De Fin Presupuesto: </td>
<td><input type="date" name="fecha4" id="fecha4" /></td>
<td>Hora De Fin Presupuesto: </td>
<td colspan="2"><input type="time" name="hora4" id="hora4" /></td>
</tr>
<tr>
<td><button type="button" onClick="interval_date();">Calcular Tiempo Presupuesto</button></td>
<td>Tiempo Pendiente Presupuesto:</td>
<td><input name="resultado2" type="text" name="resultado2" id="resultado2" /></td>
<td colspan="2" rowspan="3">&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="2">Tiempo Total De Estancia Quitando Tiempo Presupuesto </td>
<td colspan="3"><input name="resultadototal" type="text" id="resultadototal" /></td>
</tr>
</table>

Y este es el código javascrip que lo calcula:

<script type="text/javascript">
function interval_date()
{
var fecha1 = document.getElementById("fecha1").value;
var hora1 = document.getElementById("hora1").value;
var fecha2= document.getElementById("fecha2").value;
var hora2 = document.getElementById("hora2").value;
var fecha3 = document.getElementById("fecha3").value;
var hora3 = document.getElementById("hora3").value;
var fecha4= document.getElementById("fecha4").value;
var hora4 = document.getElementById("hora4").value;
var resultadototal = document.getElementById("resultado").value;
var resultadototal2 = document.getElementById("resultado2").value;


var totaltotal = Date.parse(resultadototal + " " + resultadototal2) / 1000;
var init = Date.parse(fecha1 + " " + hora1) / 1000;
var finish = Date.parse(fecha2 + " " + hora2) / 1000;
var init2 = Date.parse(fecha3 + " " + hora3) / 1000;
var finish2 = Date.parse(fecha4 + " " + hora4) / 1000;
//formateamos las fechas a segundos tipo 1374998435
diferencia = parseInt(finish) - parseInt(init);
diferencia2 = parseInt(finish2) - parseInt(init2);


//comprobamos el tiempo que ha pasado en segundos entre las dos fechas
//floor devuelve el número entero anterior, si es 5.7 devuelve 5
if(diferencia < 60){
tiempo =Math.floor(diferencia);
}else if(diferencia > 60 && diferencia < 3600){
tiempo =Math.floor(diferencia/60);
}else if(diferencia > 3600 && diferencia ){
tiempo =Math.floor(diferencia/3600);
}else{
tiempo = "Error";
}
//Segunda Tabla
if(diferencia2 < 60){
tiempo2 =Math.floor(diferencia2);
}else if(diferencia2 > 60 && diferencia2 < 3600){
tiempo2 =Math.floor(diferencia2/60);
}else if(diferencia2 > 3600 && diferencia2 ){
tiempo2 =Math.floor(diferencia2/3600);
}else{
tiempo2 = "Error";
}

//Ahora se escribe el resultado en otro input.

document.getElementById("resultadototal").value=pa rseFloat(tiempo)-parseFloat(tiempo2);

document.getElementById("resultado").value = tiempo;
document.getElementById("resultado2").value = tiempo2;
document.getElementById("resultadototal").value = diferenciatotal;

}
</script>

En "resultadototal" es donde quiero mostrar el resultado final, que es el tiempo real (Quitando el tiempo de presupuesto) que he tardado en reparar el artículo.

Muchas gracias
  #2 (permalink)  
Antiguo 04/05/2015, 03:15
 
Fecha de Ingreso: diciembre-2014
Mensajes: 13
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Problema con cálculo de tiempo

Me autosoluciono. La solucion es hacer que el resultado lo muestre solo en horas, así hace la operación bien. Así quedaría el código de javascrip(Por si a alguien le sirve):

<script type="text/javascript">
function interval_date()
{
var fecha1 = document.getElementById("fecha1").value;
var hora1 = document.getElementById("hora1").value;
var fecha2= document.getElementById("fecha2").value;
var hora2 = document.getElementById("hora2").value;
var fecha3 = document.getElementById("fecha3").value;
var hora3 = document.getElementById("hora3").value;
var fecha4= document.getElementById("fecha4").value;
var hora4 = document.getElementById("hora4").value;
var resultadototal = document.getElementById("resultado").value;
var resultadototal2 = document.getElementById("resultado2").value;


var totaltotal = Date.parse(resultadototal + " " + resultadototal2) / 1000;
var init = Date.parse(fecha1 + " " + hora1) / 1000;
var finish = Date.parse(fecha2 + " " + hora2) / 1000;
var init2 = Date.parse(fecha3 + " " + hora3) / 1000;
var finish2 = Date.parse(fecha4 + " " + hora4) / 1000;
//formateamos las fechas a segundos tipo 1374998435
diferencia = parseInt(finish) - parseInt(init);
diferencia2 = parseInt(finish2) - parseInt(init2);


//comprobamos el tiempo que ha pasado en segundos entre las dos fechas
//floor devuelve el número entero anterior, si es 5.7 devuelve 5
if(diferencia > 0 && diferencia ){
tiempo =Math.floor(diferencia/3600);
}else{
tiempo = "Error";
}
//Segunda Tabla
if(diferencia2 > 0 && diferencia2 ){
tiempo2 =Math.floor(diferencia2/3600);
}else{
tiempo2 = "Error";
}

//Ahora se escribe el resultado en otro input.

document.getElementById("resultadototal").value=pa rseFloat(tiempo)-parseFloat(tiempo2);

document.getElementById("resultado").value = tiempo;
document.getElementById("resultado2").value = tiempo2;
document.getElementById("resultadototal").value = diferenciatotal;

}
</script>

Etiquetas: operaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:06.