Foros del Web » Programando para Internet » Javascript »

Como optimizar este script para sumar horas?

Estas en el tema de Como optimizar este script para sumar horas? en el foro de Javascript en Foros del Web. Mirando el FAQ http://www.forosdelweb.com/showpost....0&postcount=14 modifique el script para sumar hasta 100 valores que traigo de una base de datos, pero lo hice de una manera ...
  #1 (permalink)  
Antiguo 03/09/2009, 22:28
 
Fecha de Ingreso: diciembre-2001
Ubicación: Mar del Plata
Mensajes: 203
Antigüedad: 22 años, 4 meses
Puntos: 0
Como optimizar este script para sumar horas?

Mirando el FAQ http://www.forosdelweb.com/showpost....0&postcount=14 modifique el script para sumar hasta 100 valores que traigo de una base de datos, pero lo hice de una manera un poco torpe porque no se hacerlo de otra, es decir el en script cada vez que es necesario listo "TODOS LOS CAMPOS DE TEXTO" esto funciona pero me queda un script gigantezco, lo que yo quiero es sabiendo cuantos registros me tira la db, por ejemplo 36, que me sume esos 36 campos y no tener que escribir semejante pagina, imaginen que la db me de unos 300 registros para sumar !!! actualmente lo soluciono con el siguiente ejemplo, y limito la consulta a 100 resultados, funciona, pero quisiera optimizar el tema !!!

Código PHP:
function sumaTiempos(t1t2t3t4t5t6t7t8t9t10t11t12t13t14t15t16t17t18t19t20t21t22t23t24t25t26t27t28t29t30t31t32t33t34t35t36t37t38t39t40t41t42t43t44t45t46t47t48t49t50t51t52t53t54t55t56t57t58t59t60t61t62t63t64t65t66t67t68t69t70t71t72t73t74t75t76t77t78t79t80t81t82t83t84t85t86t87t88t89t90t91t92t93t94t95t96t97t98t99t100){  
    var 
secs1 stringToSeconds(t1);  
    var 
secs2 stringToSeconds(t2); 
    var 
secs3 stringToSeconds(t3); 
    var 
secs4 stringToSeconds(t4); 
    var 
secs5 stringToSeconds(t5); 
    var 
secs6 stringToSeconds(t6); 
    var 
secs7 stringToSeconds(t7); 
    var 
secs8 stringToSeconds(t8); 
    var 
secs9 stringToSeconds(t9); 
    var 
secs10 stringToSeconds(t10); 
    var 
secs11 stringToSeconds(t11); 
    var 
secs12 stringToSeconds(t12); 
    var 
secs13 stringToSeconds(t13); 
    var 
secs14 stringToSeconds(t14); 
    var 
secs15 stringToSeconds(t15); 
    var 
secs16 stringToSeconds(t16); 
    var 
secs17 stringToSeconds(t17); 
    var 
secs18 stringToSeconds(t18); 
    var 
secs19 stringToSeconds(t19); 
    var 
secs20 stringToSeconds(t20); 
    var 
secs21 stringToSeconds(t21); 
    var 
secs22 stringToSeconds(t22); 
    var 
secs23 stringToSeconds(t23); 
    var 
secs24 stringToSeconds(t24); 
    var 
secs25 stringToSeconds(t25); 
    var 
secs26 stringToSeconds(t26); 
    var 
secs27 stringToSeconds(t27); 
    var 
secs28 stringToSeconds(t28); 
    var 
secs29 stringToSeconds(t29); 
    var 
secs30 stringToSeconds(t30); 
    var 
secs31 stringToSeconds(t31); 
    var 
secs32 stringToSeconds(t32); 
    var 
secs33 stringToSeconds(t33); 
    var 
secs34 stringToSeconds(t34); 
    var 
secs35 stringToSeconds(t35); 
    var 
secs36 stringToSeconds(t36); 
    var 
secs37 stringToSeconds(t37); 
    var 
secs38 stringToSeconds(t38); 
    var 
secs39 stringToSeconds(t39); 
    var 
secs40 stringToSeconds(t40); 
    var 
secs41 stringToSeconds(t41); 
    var 
secs42 stringToSeconds(t42); 
    var 
secs43 stringToSeconds(t43); 
    var 
secs44 stringToSeconds(t44); 
    var 
secs45 stringToSeconds(t45); 
    var 
secs46 stringToSeconds(t46); 
    var 
secs47 stringToSeconds(t47); 
    var 
secs48 stringToSeconds(t48); 
    var 
secs49 stringToSeconds(t49); 
    var 
secs50 stringToSeconds(t50); 
    var 
secs51 stringToSeconds(t51); 
    var 
secs52 stringToSeconds(t52); 
    var 
secs53 stringToSeconds(t53); 
    var 
secs54 stringToSeconds(t54); 
    var 
secs55 stringToSeconds(t55); 
    var 
secs56 stringToSeconds(t56); 
    var 
secs57 stringToSeconds(t57); 
    var 
secs58 stringToSeconds(t58); 
    var 
secs59 stringToSeconds(t59); 
    var 
secs60 stringToSeconds(t60); 
    var 
secs61 stringToSeconds(t61); 
    var 
secs62 stringToSeconds(t62); 
    var 
secs63 stringToSeconds(t63); 
    var 
secs64 stringToSeconds(t64); 
    var 
secs65 stringToSeconds(t65); 
    var 
secs66 stringToSeconds(t66); 
    var 
secs67 stringToSeconds(t67); 
    var 
secs68 stringToSeconds(t68); 
    var 
secs69 stringToSeconds(t69); 
    var 
secs70 stringToSeconds(t70); 
    var 
secs71 stringToSeconds(t71); 
    var 
secs72 stringToSeconds(t72); 
    var 
secs73 stringToSeconds(t73); 
    var 
secs74 stringToSeconds(t74); 
    var 
secs75 stringToSeconds(t75); 
    var 
secs76 stringToSeconds(t76); 
    var 
secs77 stringToSeconds(t77); 
    var 
secs78 stringToSeconds(t78); 
    var 
secs79 stringToSeconds(t79); 
    var 
secs80 stringToSeconds(t80); 
    var 
secs81 stringToSeconds(t81); 
    var 
secs82 stringToSeconds(t82); 
    var 
secs83 stringToSeconds(t83); 
    var 
secs84 stringToSeconds(t84); 
    var 
secs85 stringToSeconds(t85); 
    var 
secs86 stringToSeconds(t86); 
    var 
secs87 stringToSeconds(t87); 
    var 
secs88 stringToSeconds(t88); 
    var 
secs89 stringToSeconds(t89); 
    var 
secs90 stringToSeconds(t90); 
    var 
secs91 stringToSeconds(t91); 
    var 
secs92 stringToSeconds(t92); 
    var 
secs93 stringToSeconds(t93); 
    var 
secs94 stringToSeconds(t94); 
    var 
secs95 stringToSeconds(t95); 
    var 
secs96 stringToSeconds(t96); 
    var 
secs97 stringToSeconds(t97); 
    var 
secs98 stringToSeconds(t98); 
    var 
secs99 stringToSeconds(t99); 
    var 
secs100 stringToSeconds(t100); 
    var 
secsSuma secs1 secs2 secs3 secs4 secs5 secs6 secs7 secs8 secs9 secs10 secs11 secs12 secs13 secs14 secs15 secs16 secs17 secs18 secs19 secs20 secs21 secs22 secs23 secs24 secs25 secs26 secs27 secs28 secs29 secs30 secs31 secs32 secs33 secs34 secs35 secs36 secs37 secs38 secs39 secs40 secs41 secs42 secs43 secs44 secs45 secs46 secs47 secs48 secs49 secs50 secs51 secs52 secs53 secs54 secs55 secs56 secs57 secs58 secs59 secs60 secs61 secs62 secs63 secs64 secs65 secs66 secs67 secs68 secs69 secs70 secs71 secs72 secs73 secs74 secs75 secs76 secs77 secs78 secs79 secs80 secs81 secs82 secs83 secs84 secs85 secs86 secs87 secs88 secs89 secs90 secs91 secs92 secs93 secs94 secs95 secs96 secs97 secs98 secs99 secs100;  
    return 
secondsToTime(secsSuma);  
   }  

function 
calcT3(){  
with (document.frm)  
t.value sumaTiempos(t1.valuet2.valuet3.valuet4.valuet5.valuet6.valuet7.valuet8.valuet9.valuet10.valuet11.valuet12.valuet13.valuet14.valuet15.valuet16.valuet17.valuet18.valuet19.valuet20.valuet21.valuet22.valuet23.valuet24.valuet25.valuet26.valuet27.valuet28.valuet29.valuet30.valuet31.valuet32.valuet33.valuet34.valuet35.valuet36.valuet37.valuet38.valuet39.valuet40.valuet41.valuet42.valuet43.valuet44.valuet45.valuet46.valuet47.valuet48.valuet49.valuet50.valuet51.valuet52.valuet53.valuet54.valuet55.valuet56.valuet57.valuet58.valuet59.valuet60.valuet61.valuet62.valuet63.valuet64.valuet65.valuet66.valuet67.valuet68.valuet69.valuet70.valuet71.valuet72.valuet73.valuet74.valuet75.valuet76.valuet77.valuet78.valuet79.valuet80.valuet81.valuet82.valuet83.valuet84.valuet85.valuet86.valuet87.valuet88.valuet89.valuet90.valuet91.valuet92.valuet93.valuet94.valuet95.valuet96.valuet97.valuet98.valuet99.valuet100.value);  

Gracias al usuario derkenuke modifiqué parte del código de la primer función por esto

Código PHP:
function sumaTiempos() {
for(var 
i=0dev=0i<sumaTiempos.arguments.lengthi++)
dev+=stringToSeconds(sumaTiempos.arguments[i]);
return 
dev;

Ahorrando muchas líneas de código y sin importar la cantidad de argumentos pasados,lo que me faltaría es optimizar la función calcT3 para no tener que poner por ejemplo los 100 valores de los campos (t1.value, t2.value, t3.value etc) se entiende, buscar alguna manera que diga función sumartiempo (sumame todos los campos del form)

Desde ya les estoy muy agradecido!!!
__________________
:) Fernando Dichiera (:
[email protected]
  #2 (permalink)  
Antiguo 06/09/2009, 13:01
 
Fecha de Ingreso: diciembre-2001
Ubicación: Mar del Plata
Mensajes: 203
Antigüedad: 22 años, 4 meses
Puntos: 0
Respuesta: Como optimizar este script para sumar horas?

Alguien tendra algun ejemplo o explicacion?
Desde ya muchas gracias!
__________________
:) Fernando Dichiera (:
[email protected]
  #3 (permalink)  
Antiguo 06/09/2009, 14:30
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Mensaje Respuesta: Como optimizar este script para sumar horas?

Hola,

Posiblemente:

Código javascript:
Ver original
  1. ...
  2. function sumaTiempos() {
  3.     var dev=0;
  4.     for(var i=0; i<document.Valores.elements.length; i++)
  5.     if (document.Valores.elements[i].type == "text")
  6.         dev+=stringToSeconds(document.Valores.elements[i].value);
  7.     return dev;
  8. }
  9. //-->
  10. </script>
  11. </head>
  12. <body>
  13. <form id="Valores" name="Valores" method="post" action="">
  14.     <input type="text" name="Valor[]" />
  15.     <input type="text" name="Valor[]" />
  16.     <input type="text" name="Valor[]" />
  17. ...

Saludos,
  #4 (permalink)  
Antiguo 06/09/2009, 18:12
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: Como optimizar este script para sumar horas?

Creo que es una buena sugerencia hackman. Sin embargo, considerando la cantidad de elemenentos que pueden ser manejado, creo que el for quedaría mejor así:

for(var i=0, var l=document.Valores.elements.length; i< l; i++)

De sa forma logras optimizar la función.
También he oido que document.Valores puede dar problemas. Una forma que es más segura es document.forms.Valores Pero en realidad de esto no estoy completamente seguro.
__________________
twitter: @imbuzu
  #5 (permalink)  
Antiguo 06/09/2009, 19:04
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Como optimizar este script para sumar horas?

Hola,

Seguramente que sí.

En NN6 se usaba de esta forma : document.forms['Valores']

Muchos saludos !

ps:

Habría que investigar cual es la más compatible entre todos los browsers, existen muchas formas de llegar a los elementos del formulario.
  #6 (permalink)  
Antiguo 06/09/2009, 19:10
 
Fecha de Ingreso: diciembre-2001
Ubicación: Mar del Plata
Mensajes: 203
Antigüedad: 22 años, 4 meses
Puntos: 0
Respuesta: Como optimizar este script para sumar horas?

Muchísimas gracias! la parte de la función sumaTiempos la entendí y me parece facil de implementar, pero me faltaría ver como optimizar o simplificar la última funcion calcT3

Código PHP:
function calcT3(){   
with (document.frm)   
t.value sumaTiempos(t1.valuet2.valuet3.valuet4.valuet5.valuet6.valuet7.valuet8.valuet9.valuet10.valuet11.valuet12.valuet13.valuet14.valuet15.valuet16.valuet17.valuet18.valuet19.valuet20.valuet21.valuet22.valuet23.valuet24.valuet25.valuet26.valuet27.valuet28.valuet29.valuet30.valuet31.valuet32.valuet33.valuet34.valuet35.valuet36.valuet37.valuet38.valuet39.valuet40.valuet41.valuet42.valuet43.valuet44.valuet45.valuet46.valuet47.valuet48.valuet49.valuet50.valuet51.valuet52.valuet53.valuet54.valuet55.valuet56.valuet57.valuet58.valuet59.valuet60.valuet61.valuet62.valuet63.valuet64.valuet65.valuet66.valuet67.valuet68.valuet69.valuet70.valuet71.valuet72.valuet73.valuet74.valuet75.valuet76.valuet77.valuet78.valuet79.valuet80.valuet81.valuet82.valuet83.valuet84.valuet85.valuet86.valuet87.valuet88.valuet89.valuet90.valuet91.valuet92.valuet93.valuet94.valuet95.valuet96.valuet97.valuet98.valuet99.valuet100.value);   

Si alguién me puede orientar les estaré agradecido!!!
__________________
:) Fernando Dichiera (:
[email protected]
  #7 (permalink)  
Antiguo 06/09/2009, 23:05
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Como optimizar este script para sumar horas?

Hola,

Cita:
Iniciado por fermdp Ver Mensaje
Muchísimas gracias! la parte de la función sumaTiempos la entendí y me parece facil de implementar, ...


Cita:
Iniciado por fermdp Ver Mensaje
... pero me faltaría ver como optimizar o simplificar la última funcion calcT3
La función calcT3 ya no la necesitas, porque la reemplaza completamente la función sumaTiempos



Saludos,
  #8 (permalink)  
Antiguo 06/09/2009, 23:10
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Como optimizar este script para sumar horas?

Hola,

Bueno, talves no la reemplaza completamente,
Pero no tengo ni idea que es : t.

Código PHP:
function calcT3(){   
t.value secondsToTime(sumaTiempos());

Saludos,
  #9 (permalink)  
Antiguo 06/09/2009, 23:27
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Como optimizar este script para sumar horas?

Hola,

Posiblemente:

Código javascript:
Ver original
  1. <script type="application/javascript">
  2. <!--
  3. function stringToSeconds(s) {
  4.     return new Number(s);
  5. }
  6. function secondsToTime(s) {
  7.     return s;
  8. }
  9. function sumaTiempos() {
  10.     var dev=0;
  11.     for(var i = 0; i < document.forms.Valores.elements.length; i++)
  12.     if (document.Valores.elements[i].type == "text" &&
  13.             document.Valores.elements[i].name == "Valor[]")
  14.         dev += stringToSeconds(document.forms.Valores.elements[i].value);
  15.     return secondsToTime(dev);
  16. }
  17. function calcT3() {  
  18.     document.getElementById("Resultado").value = sumaTiempos();
  19.     return false;
  20. }
  21. //-->
  22. </script>
  23. </head>
  24. <body>
  25. <form id="Valores" name="Valores" method="post" action="" onsubmit="return calcT3();">
  26.     <input type="text" name="Valor[]" />
  27.     <input type="text" name="Valor[]" />
  28.     <input type="text" name="Valor[]" />
  29.     <input type="submit" name="Boton" id="Boton" value="Submit" />
  30.     <input type="text" name="Resultado" id="Resultado" disabled="disabled" />
  31. </form>

Saludos.
  #10 (permalink)  
Antiguo 06/09/2009, 23:34
 
Fecha de Ingreso: julio-2009
Mensajes: 5
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Como optimizar este script para sumar horas?

Si los tiempos estan en la base de datos, porque no pedis en la consulta SQL que los devuelva sumados? (Con SUM)

Fijate estas 2 webs:
techonthenet.com/sql/sum.php
sql-tutorial.net/SQL-SUM.asp


Saludos!
  #11 (permalink)  
Antiguo 07/09/2009, 04:31
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: Como optimizar este script para sumar horas?

Eso... por que dejar que JS haga un trabajo que MySQL (supongo que es lo que estás usnado) Puede hacer sin problemas. Que es lo que quieres lograr?
__________________
twitter: @imbuzu
  #12 (permalink)  
Antiguo 10/09/2009, 13:27
 
Fecha de Ingreso: diciembre-2001
Ubicación: Mar del Plata
Mensajes: 203
Antigüedad: 22 años, 4 meses
Puntos: 0
Respuesta: Como optimizar este script para sumar horas?

Muchísimas gracias a todos. Al final logre un mi cometido usando parte de las respuestas y soluciones dadas por ustedes, dado que la opción de realizar la suma con mysql no me parecía adecuada por ser muy compleja la consulta ue realizo y completa también la página y no quiero sumarle tarea a mysql para obtener el mejor tiempo posible en la respuesta, dado que muchas veces el resultado de la consulta es una cantidad impotante de datos y no quiero tener un cuello de botella en alguno de los procesos, me parece que esta opción que les muestro a modo de ejemplo cumple bien su cometido, este es el resultado:

Código javascript:
Ver original
  1. <html>
  2. <head>
  3.   <script language="JavaScript">
  4. <!--
  5. function padNmb(nStr, nLen){
  6.     var sRes = String(nStr);
  7.     var sCeros = "0000000000";
  8.     return sCeros.substr(0, nLen - sRes.length) + sRes;
  9.    }
  10.  
  11.    function stringToSeconds(tiempo){
  12.     var sep1 = tiempo.indexOf(":");
  13.     var sep2 = tiempo.lastIndexOf(":");
  14.     var hor = tiempo.substr(0, sep1);
  15.     var minu = tiempo.substr(sep1 + 1, sep2 - sep1 - 1);
  16.     var sec = tiempo.substr(sep2 + 1);
  17.     return (Number(sec) + (Number(minu) * 60) + (Number(hor) * 3600));
  18.    }
  19.  
  20.    function secondsToTime(secs){
  21.     var hor = Math.floor(secs / 3600);
  22.     var minu = Math.floor((secs - (hor * 3600)) / 60);
  23.     var sec = secs - (hor * 3600) - (minu * 60);
  24.     return padNmb(hor, 2) + ":" + padNmb(minu, 2) + ":" + padNmb(sec, 2);
  25.    }
  26.  
  27.  function sumaTiempos() {
  28.     var dev=0;
  29.     for(var i = 0; i < document.forms.formulario_horas.elements.length; i++)
  30.     if (document.forms.formulario_horas.elements[i].type == "text" &&
  31.             document.forms.formulario_horas.elements[i].name == "tiempo")
  32.         dev += stringToSeconds(document.forms.formulario_horas.elements[i].value);
  33.     return secondsToTime(dev);
  34. }
  35. function calcular() {  
  36.     document.getElementById("resultado").value = sumaTiempos();
  37.     return false;
  38. }
  39.  
  40. //-->
  41. </script>
  42. </head>
  43.  <body onLoad="calcular()">
  44.   <form name="formulario_horas">
  45.    Hora1 (hh:mm:ss): <input type="text" name="tiempo" value="12:30:15"><br>
  46.    Hora2 (hh:mm:ss): <input type="text" name="tiempo" value="3:41:18"><br>
  47.    Hora3 (hh:mm:ss): <input type="text" name="tiempo" value="3:42:18"><br>
  48.    Hora4 (hh:mm:ss): <input type="text" name="tiempo" value="3:49:18"><br>
  49.    Hora5 (hh:mm:ss): <input type="text" name="tiempo" value="1:44:18"><br>
  50.    Hora6 (hh:mm:ss): <input type="text" name="tiempo" value="00:00:1"><br>
  51.    Hora7 (hh:mm:ss): <input type="text" name="tiempo" value="00:00:00"><br>
  52.    Hora8 (hh:mm:ss): <input type="text" name="tiempo" value="00:00:14"><br>
  53.    <hr>
  54.    Suma (hh:mm:ss): <input type="text" name="resultado" id="resultado" value="">
  55.   </form>
  56. </body>
  57. </html>

Nuevamente muchisimas gracias a todos!
__________________
:) Fernando Dichiera (:
[email protected]

Última edición por fermdp; 11/09/2009 a las 17:09
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 14:36.