Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Suma Timestamp

Estas en el tema de Suma Timestamp en el foro de Javascript en Foros del Web. Tengo dos números en formato timestamp. ¿Cómo los sumo manteniendo el formato timestamp? var a = 1391483052; // 00:04:12 var b = 2783115185; // 17:35:34 ...
  #1 (permalink)  
Antiguo 05/02/2014, 14:46
 
Fecha de Ingreso: marzo-2008
Mensajes: 1.020
Antigüedad: 16 años, 1 mes
Puntos: 21
Suma Timestamp

Tengo dos números en formato timestamp.

¿Cómo los sumo manteniendo el formato timestamp?

var a = 1391483052; // 00:04:12
var b = 2783115185; // 17:35:34

var suma = a + b; // 20:39:46

"Suma" debería mostrar 17:39:46


Código Javascript:
Ver original
  1. // Funciones
  2.  
  3. getHumanFormat = function( timeStamp ) {
  4.     /**
  5.      * To Miliseconds
  6.      * timeStamp * 1000
  7.      */
  8.     var date = new Date( timeStamp * 1000 );
  9.    
  10.     // Math.round( +new Date() / 1000 );
  11.    
  12.     // Hours
  13.     var hours = date.getHours();
  14.    
  15.     console.log( "Horas", hours );
  16.    
  17.     // Minutes
  18.     var minutes = date.getMinutes();
  19.    
  20.     // Seconds
  21.     var seconds = date.getSeconds();
  22.    
  23.     //console.log( hours, minutes, seconds );
  24.    
  25.     // Check
  26.     var hours = ( hours < 10 ) ? "0" + hours : hours ;
  27.     var minutes = ( minutes < 10 ) ? "0" + minutes : minutes ;
  28.     var seconds = ( seconds < 10 ) ? "0" + seconds : seconds ;
  29.    
  30.     // Human Format
  31.     var formattedTime = hours + ':' + minutes + ':' + seconds;
  32.    
  33.     // Return formattedTime;
  34.     return formattedTime;
  35. };
  36.  
  37. getTimeStampFormat = function( human ) {
  38.     var timeStamp = 0;
  39.     var date;
  40.    
  41.     // Check ":"
  42.     /*if( human !:  ) {
  43.         return false;
  44.     }*/
  45.    
  46.     // Example
  47.     // var human = '23:12:00';
  48.     date = new Date();
  49.    
  50.     var a = parseInt( human.substr(0, 2) , 10); // Hours
  51.     var b = parseInt( human.substr(3, 2) , 10); // Minutes
  52.     var c = parseInt( human.substr(6, 2) , 10); // Seconds
  53.     var d = 0; // Miliseconds
  54.    
  55.     date.setHours( a, b, c, d );
  56.    
  57.     // console.log("=>", c );
  58.    
  59.     timeStamp = ( date.getTime() / 1000 );
  60.  
  61.     return timeStamp;
  62. };
__________________
_
  #2 (permalink)  
Antiguo 05/02/2014, 16:47
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Suma Timestamp

Puedes añadir una cantidad de horas B a una cantidad de horas A mediante el método setHours:

Código Javascript:
Ver original
  1. Date.prototype.sumar = function(a, b){
  2.   a.setHours(a.getHours() + b.getHours(), a.getHours() + b.getMinutes(), a.getHours() + b.getSeconds());
  3.   return (a.getHours() < 10 ? "0" + a.getHours() : a.getHours()) + ":" +
  4.          (a.getMinutes() < 10 ? "0" + a.getMinutes() : a.getMinutes())+ ":" +
  5.          (a.getSeconds() < 10 ? "0" + a.getSeconds() : a.getSeconds());
  6. };
  7.  
  8. var d1 = prompt("Hora 1:").split(":"),
  9.     d2 = prompt("Hora 2:").split(":"),
  10.     h1 = new Date(),
  11.     h2 = new Date();
  12.  
  13. h1.setHours(d1[0], d1[1], d1[2]);
  14. h2.setHours(d2[0], d2[1], d2[2]);
  15.  
  16. document.body.innerHTML = new Date().sumar(h1, h2);

La hora tiene que ser ingresada en formato HH:MM:SS, el único inconveniente está en que si, por ejemplo, la hora A es 23:30:45 y la hora B es 12:20:02, el resultado será 11:50:47 y no 35:50:47, pues en el formato estándar de las horas, solamente puede ir de 00:00:00 a 23:59:59, en otras palabras, en un caso así pasarías a la fecha siguiente y la hora que corresponda según la suma.

Añado un método al objeto Date para que sea reutilizable, pero si gustas, puedes hacerlo de manera independiente.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 05/02/2014, 16:55
 
Fecha de Ingreso: marzo-2008
Mensajes: 1.020
Antigüedad: 16 años, 1 mes
Puntos: 21
Respuesta: Suma Timestamp

Muchas Gracias por responder.

Entonces veo que no existe una manera "sencilla" de sumar enteros timestamp y debería ir por el camino que planteas o uno similar.

Gracias de nuevo.
Saludos.
__________________
_
  #4 (permalink)  
Antiguo 05/02/2014, 17:22
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Suma Timestamp

Podrías separar las horas, minutos y segundos de ambos datos y los sumas de forma independiente, luego, para los minutos y segundos, verificas que no sean mayores a 59 y si lo son, le restas 60 a dicha cantidad hasta que sea menor a 60, por ejemplo, si de la suma resultaran 134 minutos, restas 60 en un bucle hasta que sea menor a 60, por cada iteración, vas sumando 1 a las horas, lo mismo sucedería con los segundos.

Código Javascript:
Ver original
  1. var h1 = prompt("Hora 1:").split(":"),
  2.     h2 = prompt("Hora 2:").split(":"),
  3.     a = Number(h1[0]) + Number(h2[0]), //Sumo horas
  4.     b = Number(h1[1]) + Number(h2[1]), //Sumo minutos
  5.     c = Number(h1[2]) + Number(h2[2]); //Sumo segundos
  6.  
  7. while (c >= 60){
  8.   c -= 60;
  9.   b++;
  10. }
  11.  
  12. while (b >= 60){
  13.   b -= 60;
  14.   a++;
  15. }
  16.  
  17. document.body.innerHTML = (a < 10 ? "0" + a : a) + ":" +
  18.                           (b < 10 ? "0" + b : b) + ":" +
  19.                           (c < 10 ? "0" + c : c);

Con este algoritmo, se van a sumar las horas, minutos y segundos, respetando el orden que indica que los minutos y segundos no deben ser mayor o iguales a 60, pero sí mostrará las horas así sean mayores a 23.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 05/02/2014 a las 17:33
  #5 (permalink)  
Antiguo 08/02/2014, 12:01
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Suma Timestamp

buenas!

Cita:
Iniciado por opzina Ver Mensaje
Entonces veo que no existe una manera "sencilla" de sumar enteros timestamp y debería ir por el camino que planteas o uno similar.
no sé si es que tienes un mal concepto de los timestamp u otra cosa, pero evidentemente no te va funcionar la suma de ambos timestamps. en tu caso particular estas sumando dos eventos. para este contexto, entiendase evento como un momento específico en el tiempo. de acuerdo a los comentarios en las variables a y b, y el resultado que debe producir, tu quieres sumar un evento más un lapso. la suma se puede hacer en formato timestamp.

asumiendo que tienes la fecha actual (evento) y quieres agregarle 4 horas (lapso) adicionales, las 4 horas tienes que convertirlo en timestamp y sumarlo a la hora actual, también en timestamp.

Código:
var actual = Date.now(), // timestamp hora actual
lapse = 4 * 60 * 60 * 1000; // timestamp del lapso
new Date(actual + lapse); // imprime 4 horas adelantada a la fecha y hora actual;
no comprendo muy bien el próposito de ambas funciones pero debes tener cuidado porque el timestamp está basado en el dia actual y puede producir resultados erroneos.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Etiquetas: funcion, suma, timestamp
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 19:55.