2009-03-18 93 views
21

Necesito calcular si alguien es mayor de 18 años a partir de su fecha de nacimiento utilizando JQuery.Edad desde la fecha de nacimiento con JQuery

var curr = new Date(); 
curr.setFullYear(curr.getFullYear() - 18); 

var dob = Date.parse($(this).text()); 

if((curr-dob)<0) 
{ 
    $(this).text("Under 18"); 
} 
else 
{ 
    $(this).text(" Over 18"); 
} 

Debe haber algunas funciones fáciles de usar para comparar las fechas en lugar de utilizar los métodos setFullYear y getFullYear.

Nota: Mi razón real para querer encontrar un nuevo método es la longitud del código. Tengo que ajustar este código en un campo de base de datos que está limitado a 250 caracteres. Cambiar la base de datos no es algo que pueda suceder rápida o fácilmente.

+0

¿Por qué no es su campo DateTime en el PP acaba de tomar en la fecha actual y calcular la edad en el código. – TStamper

+0

Este es un truco para mostrar la edad en la GUI sin ningún cambio en ningún código o base de datos. Lo haré correctamente cuando se pueda planear un lanzamiento. –

Respuesta

25

Puede encontrar que la biblioteca de código abierto Datejs es útil. Específicamente la función addYears.

var dob = Date.parse($(this).text()); 
if (dob.addYears(18) < Date.today()) 
{ 
    $(this).text("Under 18"); 
} 
else 
{ 
    $(this).text(" Over 18"); 
} 

De una manera más concisa:

$(this).text(
    Date.parse($(this).text()).addYears(18) < Date.today() ? 
    "Under 18" : 
    " Over 18" 
) 
+0

+1 - parece mucho más fácil de preparar que los demás. Estoy usando esta biblioteca y ha sido de gran ayuda. – RSolberg

+2

¿No debería ser menor que el operador aquí más que? – tamewhale

0

Puede usar el objeto Date. Esto devolverá los milisegundos entre las dos fechas. Hay 31556952000 milisegundos en un año.

function dateDiff(var now, var dob) 
{ 
    return now.getTime() - dob.getTime(); 
} 
+0

Seguramente no hay tantos milisegundos al año. Las fechas son duras. –

+0

que no siempre es cierto (años bisiestos) –

+0

Y también hay segundos intercalares. –

1
$(this).text(((new Date().getFullYear()-Date.parts($(this).text()))>=18)?"Over 18":"Under 18"); 

mejor? : D

+0

Esto solo parece utilizar el campo del año para el cálculo, no tendrá en cuenta los meses/días de la fecha actual y la fecha de nacimiento. Entonces, con esta persona nacida en diciembre de 1991, volvería a tener más de 18 años en enero de 2009, lo cual no es cierto (tendrían 18 años en diciembre de 2009). – Parrots

+0

sí ... no tendrá efecto los meses y los días ... usar una biblioteca sería útil si desea la funcionalidad completa, como en la primera respuesta. Aún se puede construir, aunque podría ser difícil dentro de 250 caracteres. –

3

Puede eliminar la variable separada para DOB y contraer la instrucción if. El siguiente código viene con 165 caracteres:

var check = new Date(); 
check.setFullYear(check.getFullYear() - 18); 
$(this).text((new Date("3/6/2009").getTime() - check.getTime() < 0)?"Under 18":"Over 18"); 

Esto mantendrá la lógica necesaria para lidiar con los años bisiestos.

9
Date.prototype.age=function(at){ 
    var value = new Date(this.getTime()); 
    var age = at.getFullYear() - value.getFullYear(); 
    value = value.setFullYear(at.getFullYear()); 
    if (at < value) --age; 
    return age; 
}; 

var dob = new Date(Date.parse($(this).text())); 

if(dob.age(new Date()) < 18) 
{ 
    $(this).text("Under 18"); 
} 
else 
{ 
    $(this).text(" Over 18"); 
} 
+1

+1 Gran respuesta, utilizada para responder a esta pregunta http://stackoverflow.com/questions/7210887/custom-unobussive-date-validators-for-dates/7214675#7214675 –

0

Mi solución.

var startDt=document.getElementById("startDateId").value; 
var endDt=document.getElementById("endDateId").value; 
if((new Date(startDt).getTime() > new Date(endDt).getTime())) 
{ 
    ---------------------------------- 
} 
0

tenga en cuenta que todas las respuestas anteriores solo funcionan para la fecha usando el separador '/'. si está utilizando otro que esto, primero debe reemplazar ese separador.

var startDate = $('#start_date').val().replace('-','/'); 
var endDate = $('#end_date').val().replace('-','/'); 

if(startDate > endDate){ 
    // do stuff here... 
} 

codificación feliz: D

Cuestiones relacionadas