2009-03-18 35 views
21

Devo calcolare se qualcuno ha più di 18 anni dalla data di nascita utilizzando JQuery.Età dalla data di nascita utilizzando 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"); 
} 

Ci deve essere alcune funzioni più facile da usare per confrontare le date, piuttosto che utilizzando i metodi setFullYear e getFullYear.

Nota: il motivo effettivo per cui voglio trovare un nuovo metodo è la lunghezza del codice. Devo inserire questo codice in un campo di database limitato a 250 caratteri. Cambiare il database non è qualcosa che può accadere rapidamente o facilmente.

+0

Perché non è il tuo campo DateTime nel DB basta prendere nella data corrente e calcolare l'età nel codice. – TStamper

+0

Questo è un trucco per mostrare l'età nella GUI senza alcuna modifica a nessun codice o database. Lo farò correttamente quando sarà possibile pianificare un rilascio. –

risposta

25

Potrebbe essere utile la libreria open source Datejs. Specificamente la funzione addYears.

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

in maniera più concisa:

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

+1 - sembra molto più facile da preparare agli altri. Sto usando questa libreria ed è stata di grande aiuto. – RSolberg

+2

Non dovrebbe essere qui più di meno dell'operatore qui? – tamewhale

0

È possibile utilizzare l'oggetto Date. Ciò restituirà i millisecondi tra le due date. Ci sono 31556952000 millisecondi in un anno.

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

Sicuramente non ci sono molti millisecondi all'anno. Le date sono difficili –

+0

che non è sempre vero (anni bisestili) –

+0

E ci sono anche secondi bisestili. –

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

meglio? : D

+0

Questo sembra utilizzare solo il campo anno per il calcolo, non tiene conto dei mesi/giorni della data corrente e del DOB. Quindi con questo qualcuno nato nel dicembre 1991 tornerebbe come 18 anni nel gennaio 2009, il che non è vero (avrebbero compiuto 18 anni nel dicembre 2009). – Parrots

+0

sì ... non avrà effetto nei mesi e nei giorni .. usare una libreria sarebbe utile se si desidera la piena funzionalità, come nella prima risposta. Ancora può essere costruito, anche se potrebbe essere difficile all'interno di 250 caratteri. –

3

È possibile rimuovere la variabile separata per DOB e comprimere l'istruzione if. Il codice seguente arriva a 165 caratteri:

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

Ciò manterrà ancora la logica necessaria per gestire i bisestili.

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 Ottima risposta, usato rispondendo a questa domanda http://stackoverflow.com/questions/7210887/custom-unobtrusive-date-validators-for-dates/7214675#7214675 –

0

mia soluzione.

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

tenere presente che tutte le risposte di cui sopra funzionano solo per la data utilizzando il separatore '/'. se stai usando altro questo devi prima sostituire quel separatore.

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

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

felice di codifica: D

Problemi correlati