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

115
Vistas
Calcular una edad con d3-time

Estoy tratando de calcular la edad de una persona usando D3.js. Tengo el siguiente código:

 d3.timeYear.count(Birth_date, Current_date);

Birth_date es la fecha de nacimiento de una persona (un objeto Date) y Current_date es, bueno, la fecha en la que me gustaría calcular la edad de la persona. Para poder responder "si naciste el 5 de mayo de 1975, ¿cuántos años tenías el 3 de mayo de 1976".

d3.timeYear.count() parece redux las fechas hasta el comienzo del año, por lo que en mi ejemplo, mi código devolverá 1 el 1 de enero de 1976, aunque faltaban 5 meses para su primer cumpleaños.

Podría contar la cantidad de días en lugar de los años, pero podría obtener resultados erróneos localmente según la cantidad de días del año.

almost 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Lo siguiente se basa en el objeto Date de JavaScript y debería hacer el trabajo:

 function age(by,bm,bd){
 const D=new Date(), y=D.getFullYear(),
 md=D.getMonth()-bm, dd=D.getDate()-bd;
 return y-by-(md>0||!md&&dd>=0?0:1);
}

console.log(age(1992,8,26))

Básicamente devuelvo la diferencia entre el año completo de hoy y el cumpleaños. Pero también compruebo si el mes actual es mayor que el mes de cumpleaños o ( || ) si la diferencia de mes es cero ( !md es true ) y ( && ) la diferencia de día dd es mayor que cero. Si ese es el caso resto 0 de lo contrario 1 de la diferencia de año.

Y tenga en cuenta que mi función age() espera que el mes se ingrese en notación JavaScript. Esto significa que el 8 en el ejemplo anterior se refiere al mes de septiembre.

almost 4 years ago · Santiago Trujillo Denunciar

0

La respuesta de Carsten Massman me inspiró a hacer esta función, que resuelve mi problema:

 function age(birthdate, currentdate){

 const bDay = birthdate.getDate(); // Get the birthdate's day.
 const bMonth = birthdate.getMonth(); // Get the birthdate's month.
 const currYear = currentdate.getFullYear(); // Get the current date's year.

 const currBirthday = new Date(currYear + "/" + (bMonth + 1) + "/" + bDay); // Contruct the date of the birthday in the current year
 const daysToBirthday = d3.timeDay.count( d3.timeYear.floor(currBirthday), currBirthday); // Count the # of days since Jan. 1st this year
 
 // Offset the current date in the past by the number of days computed above.
 const offsetCurrent = d3.timeDay.offset(currentdate, -daysToBirthday);
 
 // Compute the number of years between the two dates (floored to the beginning of their respective year).
 return d3.timeYear.count(birthdate, offsetCurrent);
}

Esto calcula la edad para cualquier fecha de nacimiento, y en cualquier momento posterior, utilizando principalmente d3-time y un poco de métodos de fecha de javascript de vainilla.

almost 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