Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

273
Vistas
Cálculo del tiempo transcurrido javascript salida incorrecta

Actualmente estoy usando un script para calcular el tiempo transcurrido en años, meses, días, etc. en Javascript.

 $(document).ready(function(){ var birth_date = new Date('March, 25, 2022'); var years,months,days, hours, minutes, seconds; var ageCount = document.getElementById('counter'); setInterval(function(){ var current_date = new Date(); var YearDiff = (current_date.getYear() - birth_date.getYear()); var monthDiff = (current_date.getMonth() - birth_date.getMonth()); var daysDiff = (current_date.getDate() - birth_date.getDate()); var hoursDiff = (current_date.getHours() - birth_date.getHours()); var minDiff = (current_date.getMinutes() - birth_date.getMinutes()); var secDiff = (current_date.getSeconds() - birth_date.getSeconds()); ageCount.innerHTML=YearDiff+' Years '+monthDiff+' Months '+daysDiff+' Days '+hoursDiff+ ' Hours '+minDiff+' Minutes '+secDiff+' Seconds'; },500); });`

Esto parece generar los meses, días y horas correctos cuando el día de la fecha establecida es más bajo que la fecha actual (es decir, el 21 de abril cuando ahora es el 22 de abril).

 0 Years 1 Months 2 Days 8 Hours 14 Minutes 2 Seconds`

Cuando el número del día de la fecha es mayor, lo cambia a un cierto número de meses menos un número de días. Así (1 mes - 4 días, cuando debería ser solo 0 meses y 27 días).

 0 Years 1 Months -4 Days 8 Hours 14 Minutes 38 Seconds

Un ejemplo del script se puede ver aquí: https://jsfiddle.net/j2k7n4zp/

¿Alguien tiene idea de qué va mal o qué debo arreglar para que calcule la cantidad correcta de días sin usar menos?

¡Gracias por adelantado!

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Lo que está mal con su código es que asume que cada parte de una fecha posterior es más alta que cada parte de una anterior... por ejemplo... 23 de abril de 2022 al 1 de mayo de 2022 - la fecha es más baja, pero el mes es más alto - mientras que su código, ingenuamente, la parte de la fecha del 1 de mayo es mayor que el 23 de abril solo porque mayo es posterior a abril, pero no es así como funcionan las fechas

Aquí hay algo que literalmente preparé ahora, a ver si ayuda

 const dateDiff = (from, to) => { // so we don't mutate passed in dates let start = new Date(from); let end = new Date(to); if (+start > +end) { [start, end] = [end, start]; } const loop = (prop) => { const set = `set${prop}`; const get = `get${prop}`; let ret = 0; while (1) { start[set](start[get]() + 1); if (start < end) { ret++; } else { start[set](start[get]() -1); break; } } return ret; } const years = loop('FullYear'); const months = loop('Month'); const days = loop('Date'); const hours = loop('Hours'); const minutes = loop('Minutes'); const seconds = loop('Seconds'); const milliseconds = loop('Milliseconds'); return {years, months, days, hours, minutes, seconds, milliseconds} } const ageCount = document.getElementById('counter'); setInterval(() => { const r = dateDiff(new Date(), new Date('2022-03-25')); ageCount.innerHTML = `${r.years} Years, ${r.months} Months, ${r.days} Days, ${r.hours} Hours, ${r.minutes} Minutes, ${r.seconds} Seconds`; }, 500);
 <div id="counter"> </div>

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda