¿Cómo puedo calcular una edad en años, dada una fecha de nacimiento con el formato AAAAMMDD? ¿Es posible usar la Date()
función?
Estoy buscando una solución mejor que la que estoy usando ahora:
var dob = '19800810';
var year = Number(dob.substr(0, 4));
var month = Number(dob.substr(4, 2)) - 1;
var day = Number(dob.substr(6, 2));
var today = new Date();
var age = today.getFullYear() - year;
if (today.getMonth() < month || (today.getMonth() == month && today.getDate() < day)) {
age--;
}
alert(age);
javascript
date
Francisc
fuente
fuente
Date
objeto tendría que hacer si lo encapsulara. La gente podría escribir libros sobre la insolencia delDate
manejo de JS . ... Si puedes vivir a veces con un día de descanso, entonces la aproximación:AgeInYears = Math.floor ( (now_Date - DOB_Date) / 31556952000 )
es lo más simple que puedes conseguir.Respuestas:
Yo iría por la legibilidad:
Descargo de responsabilidad: esto también tiene problemas de precisión, por lo que tampoco se puede confiar completamente en esto. Puede estar apagado por algunas horas, algunos años o durante el horario de verano (dependiendo de la zona horaria).
En cambio, recomendaría usar una biblioteca para esto, si la precisión es muy importante. Además
@Naveens post
, es probablemente el más preciso, ya que no depende de la hora del día.Puntos de referencia: http://jsperf.com/birthday-calculation/15
fuente
Prueba esto.
Creo que lo único que parecía crudo en su código fue la
substr
parte.Fiddle : http://jsfiddle.net/codeandcloud/n33RJ/
fuente
Importante: esta respuesta no proporciona una respuesta 100% precisa, está desactivada por alrededor de 10-20 horas dependiendo de la fecha.
Por supuesto, no pude resistir el impulso de aceptar el desafío y hacer una calculadora de cumpleaños más rápida y más corta que la solución aceptada actual. El punto principal de mi solución es que las matemáticas son rápidas, por lo que, en lugar de usar ramificaciones, y el modelo de fecha que JavaScript proporciona para calcular una solución, usamos las maravillosas matemáticas
La respuesta se ve así, y corre ~ 65% más rápido que la de naveen, además es mucho más corta:
El número mágico: 31557600000 es 24 * 3600 * 365.25 * 1000, que es la duración de un año, la duración de un año es de 365 días y 6 horas, que es de 0.25 días. Al final, suelo el resultado que nos da la edad final.
Aquí están los puntos de referencia: http://jsperf.com/birthday-calculation
Para admitir el formato de datos de OP, puede reemplazar
+new Date(dateString);
con
+new Date(d.substr(0, 4), d.substr(4, 2)-1, d.substr(6, 2));
Si puede encontrar una solución mejor, ¡comparta! :-)
fuente
dateString
argumento es justo para que el constructor Date () lo analice correctamente. Por ejemplo, tomando elYYYYMMDD
formato que di en la pregunta, fallará.Con momentjs:
fuente
Solución limpia de una línea usando ES6:
Estoy usando un año de 365.25 días (0.25 debido a años bisiestos) que son 3.15576e + 10 milisegundos (365.25 * 24 * 60 * 60 * 1000) respectivamente.
fuente
const yearInMs = 3.15576e+10 // Using a year of 365.25 days (because leap years)
Hace algún tiempo hice una función con ese propósito:
Toma un objeto Date como entrada, por lo que debe analizar la
'YYYYMMDD'
cadena de fecha con formato:fuente
birthDate
es el 5 de enero de 1980 y la fecha actual es el 4 de enero de 2005 , entonces la función informará erróneamenteage
como 25 ... El valor correcto es 24.Aquí está mi solución, simplemente pase una fecha analizable:
fuente
Solución alternativa, porque por qué no:
fuente
fuente
Para probar si el cumpleaños ya pasó o no, defino una función auxiliar
Date.prototype.getDoY
, que efectivamente devuelve el número de día del año. El resto se explica por sí mismo.fuente
Creo que podría ser simplemente así:
Funciona también con una marca de tiempo
fuente
Solo tenía que escribir esta función por mí mismo: la respuesta aceptada es bastante buena, pero la OMI podría usar algo de limpieza. Esto requiere una marca de tiempo de Unix para Dob porque ese era mi requisito, pero podría adaptarse rápidamente para usar una cadena:
Observe que he usado un valor plano de 31 en mi función measureDays. Lo único que le importa al cálculo es que el "día del año" sea una medida monótonamente creciente de la marca de tiempo.
Si usa una marca de tiempo o cadena de JavaScript, obviamente querrá eliminar el factor de 1000.
fuente
Para saber la edad en la que ha entrado la fecha europea:
fuente
Una posible solución más con moment.js :
fuente
Revisé los ejemplos mostrados anteriormente y no funcionaron en todos los casos, y debido a esto hice un guión propio. Probé esto, y funciona perfectamente.
fuente
Esa es la forma más elegante para mí:
fuente
Obtenga la edad (años, meses y días) desde la fecha de nacimiento con javascript
Función calcularEdad (años, meses y días)
Funcion esNumero
fuente
Funciona perfecto para mí, muchachos.
fuente
Sé que este es un hilo muy antiguo, pero quería poner en esta implementación que escribí para encontrar la edad que creo que es mucho más precisa.
Por supuesto, puede adaptar esto para que se ajuste a otros formatos de obtención de los parámetros. Espero que esto ayude a alguien que busca una mejor solución.
fuente
Usé este enfoque usando la lógica en lugar de las matemáticas. Es preciso y rápido. Los parámetros son el año, mes y día del cumpleaños de la persona. Devuelve la edad de la persona como un número entero.
fuente
Adoptando las publicaciones de OP de naveen y originales, terminé con un trozo de método reutilizable que acepta cadenas y / u objetos JS Date.
Lo nombré
gregorianAge()
porque este cálculo da exactamente cómo denotamos la edad usando el calendario gregoriano. es decir, sin contar el año final si el mes y el día son anteriores al mes y al día del año de nacimiento.fuente
Dos opciones más:
fuente
He actualizado algunas de las respuestas anteriores.
Espero que ayude: D
fuente
Aquí hay una manera simple de calcular la edad:
fuente
fuente
Puede usar esto para la restricción de edad en su formulario:
fuente
Llegué demasiado tarde, pero descubrí que esta es la forma más sencilla de calcular una fecha de nacimiento.
La etiqueta HTML:
Esperemos que esto ayude.
fuente
Aquí está la solución más simple y precisa que se me ocurrió:
Y aquí hay una muestra que considerará el 29 de febrero -> 28 de febrero al año.
¡Incluso funciona con edad negativa!
fuente
Otra solución más:
fuente
Con el método momentjs "fromNow", esto le permite trabajar con fecha formateada, es decir: 15/03/1968
var dob = document.getElementByID("dob"); var age = moment(dob.value).fromNow(true).replace(" years", "");
//fromNow(true) => suffix "ago" is not displayed //but we still have to get rid of "years";
Como una versión prototipo
}
fuente