2009-03-18 18 views
21

Ich muss berechnen, wenn jemand über 18 von ihrem Geburtsdatum mit JQuery ist.Alter von Geburtsdatum mit 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"); 
} 

Es müssen einige einfachere Funktionen zu verwenden, um Daten zu vergleichen, anstatt die setFullYear und getFullYear Methoden.

Hinweis: Mein aktueller Grund, eine neue Methode zu finden, ist die Länge des Codes. Ich muss diesen Code in ein Datenbankfeld einfügen, das auf 250 Zeichen beschränkt ist. Das Ändern der Datenbank kann nicht schnell oder einfach erfolgen.

+0

Warum ist nicht Ihr Datetime-Feld in DB in dem aktuellen Datum nimmt nur und man das Alter in Ihrem Code zu berechnen. – TStamper

+0

Dies ist ein Hack, um das Alter in der GUI ohne Änderungen an Code oder Datenbank anzuzeigen. Ich werde es richtig machen, wenn eine Veröffentlichung geplant werden kann. –

Antwort

25

Sie könnten die Open Source Datejs Bibliothek hilfreich finden. Speziell die addYears Funktion.

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

In einer prägnanten Art und Weise:

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

+1 - scheint viel einfacher zu machen, dass andere. Ich benutze diese Bibliothek und es war eine große Hilfe. – RSolberg

+2

Sollte nicht weniger als Bediener hier mehr sein als? – tamewhale

0

Sie könnten das Date-Objekt verwenden. Dies wird die Millisekunden zwischen den beiden Daten zurückgeben. Es gibt 31556952000 Millisekunden in einem Jahr.

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

Sicherlich gibt es nicht so viele Millisekunden jedes Jahr. Termine sind schwer. –

+0

das ist nicht immer wahr (Schaltjahre) –

+0

Und es gibt auch Schaltsekunden. –

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

besser? : D

+0

Dies scheint nur das Jahr-Feld für die Berechnung zu verwenden, berücksichtigt nicht Monate/Tage des aktuellen Datums und der DOB. Also würde jemand, der im Dezember 1991 geboren wurde, im Januar 2009 als über 18 zurückkommen, was nicht stimmt (sie wären 18 im Dezember 2009). – Parrots

+0

ja ... es wird nicht die Monate und Tage in Kraft treten .. eine Bibliothek wäre nützlich, wenn Sie die volle Funktionalität wollen, wie in der ersten Antwort. Immer noch kann gebaut werden, obwohl es innerhalb von 250 Zeichen schwierig sein könnte. –

3

Sie können die separate Variable für DOB entfernen und die If-Anweisung ausblenden. Der folgende Code kommt mit 165 Zeichen:

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

Dies wird immer noch die Logik zur Bewältigung von Schaltjahren halten.

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 Große Antwort, verwendet es diese Frage http://stackoverflow.com/questions/7210887/custom-unobtrusive-date-validators-for-dates/7214675#7214675 beantworten –

0

Meine Lösung.

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

Beachten Sie, dass alle obigen Antworten nur für Datum mit Trennzeichen '/' funktionieren. Wenn Sie andere verwenden, müssen Sie dieses Trennzeichen zuerst ersetzen.

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

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

glücklich Codierung: D

Verwandte Themen