Wie kann ich ein Alter in Jahren bei einem Geburtsdatum im Format JJJJMMTT berechnen? Ist es möglich mit der Date()
Funktion?
Ich suche nach einer besseren Lösung als der, die ich jetzt verwende:
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
quelle
quelle
Date
Objekt tun müsste, wenn es es einkapseln würde. Die Leute könnten Bücher über die Dummheit des Umgangs mit JS schreibenDate
. ... Wenn Sie damit leben können, dass Sie manchmal einen Tag frei haben, dann ist die Annäherung:AgeInYears = Math.floor ( (now_Date - DOB_Date) / 31556952000 )
so einfach wie möglich.Antworten:
Ich würde mich um Lesbarkeit bemühen:
Haftungsausschluss: Dies hat auch Präzisionsprobleme, sodass auch diesem nicht vollständig vertraut werden kann. Es kann einige Stunden, einige Jahre oder während der Sommerzeit (abhängig von der Zeitzone) ausgeschaltet sein.
Stattdessen würde ich empfehlen, dafür eine Bibliothek zu verwenden, wenn Präzision sehr wichtig ist. Auch
@Naveens post
ist wahrscheinlich die genaueste, da es nicht von der Tageszeit abhängt.Benchmarks: http://jsperf.com/birthday-calculation/15
quelle
Versuche dies.
Ich glaube, das einzige, was auf Ihrem Code grob aussah, war der
substr
Teil.Geige : http://jsfiddle.net/codeandcloud/n33RJ/
quelle
Wichtig: Diese Antwort liefert keine 100% genaue Antwort, sie ist je nach Datum um ca. 10-20 Stunden verschoben.
Ich konnte natürlich dem Drang nicht widerstehen, die Herausforderung anzunehmen und einen schnelleren und kürzeren Geburtstagsrechner als die derzeit akzeptierte Lösung zu erstellen. Der Hauptpunkt für meine Lösung ist, dass Mathematik schnell ist. Statt Verzweigung zu verwenden und das Datumsmodell Javascript zur Berechnung einer Lösung zu verwenden, verwenden wir die wunderbare Mathematik
Die Antwort sieht so aus und läuft ~ 65% schneller als die von Naveen und ist viel kürzer:
Die magische Zahl: 31557600000 ist 24 * 3600 * 365,25 * 1000. Dies ist die Länge eines Jahres, die Länge eines Jahres beträgt 365 Tage und 6 Stunden, was 0,25 Tagen entspricht. Am Ende habe ich das Ergebnis, das uns das endgültige Alter gibt.
Hier sind die Benchmarks: http://jsperf.com/birthday-calculation
OPs Datenformat unterstützen Sie ersetzen können
+new Date(dateString);
mit
+new Date(d.substr(0, 4), d.substr(4, 2)-1, d.substr(6, 2));
Wenn Sie eine bessere Lösung finden können, teilen Sie diese bitte mit! :-)
quelle
dateString
Argument, dass der Date () - Konstruktor genau richtig ist, um es korrekt zu analysieren. Wenn Sie beispielsweise dasYYYYMMDD
Format verwenden, das ich in der Frage angegeben habe, schlägt dies fehl.Mit momentjs:
quelle
Reinigen Sie die Einzeilerlösung mit ES6:
Ich verwende ein Jahr von 365,25 Tagen (0,25 aufgrund von Schaltjahren), was 3,15576e + 10 Millisekunden (365,25 * 24 * 60 * 60 * 1000) entspricht.
quelle
const yearInMs = 3.15576e+10 // Using a year of 365.25 days (because leap years)
Vor einiger Zeit habe ich eine Funktion mit diesem Zweck gemacht:
Es wird ein Datumsobjekt als Eingabe verwendet, daher müssen Sie die
'YYYYMMDD'
formatierte Datumszeichenfolge analysieren :quelle
birthDate
ist 5. Januar 1980 , und das aktuelle Datum 4. Januar 2005 , dann wird die Funktion fälschlicherweise berichtetage
als 25 ... Der richtige Wert ist 24.Hier ist meine Lösung, geben Sie einfach ein analysierbares Datum ein:
quelle
Alternative Lösung, denn warum nicht:
quelle
quelle
Um zu testen, ob der Geburtstag bereits vergangen ist oder nicht, definiere ich eine Hilfsfunktion
Date.prototype.getDoY
, die effektiv die Tagesnummer des Jahres zurückgibt. Der Rest ist ziemlich selbsterklärend.quelle
Ich denke das könnte einfach so sein:
Funktioniert auch mit einem Zeitstempel
quelle
Ich musste diese Funktion nur für mich selbst schreiben - die akzeptierte Antwort ist ziemlich gut, aber IMO könnte eine Bereinigung gebrauchen. Dies erfordert einen Unix-Zeitstempel für dob, da dies meine Anforderung war, aber schnell an die Verwendung eines Strings angepasst werden konnte:
Beachten Sie, dass ich in meiner MeasureDays-Funktion einen flachen Wert von 31 verwendet habe. Bei der Berechnung geht es nur darum, dass der "Tag des Jahres" ein monoton ansteigendes Maß für den Zeitstempel ist.
Wenn Sie einen Javascript-Zeitstempel oder eine Zeichenfolge verwenden, sollten Sie natürlich den Faktor 1000 entfernen.
quelle
So ermitteln Sie das Alter, in dem das europäische Datum eingegeben wurde:
quelle
Eine weitere mögliche Lösung mit moment.js :
quelle
Ich habe die zuvor gezeigten Beispiele überprüft und sie haben nicht in allen Fällen funktioniert. Aus diesem Grund habe ich ein eigenes Skript erstellt. Ich habe das getestet und es funktioniert perfekt.
quelle
Das ist der eleganteste Weg für mich:
quelle
Holen Sie sich das Alter (Jahre, Monate und Tage) ab dem Geburtsdatum mit Javascript
Funktion calcularEdad (Jahre, Monate und Tage)
Funktion esNumero
quelle
Funktioniert perfekt für mich, Jungs.
quelle
Ich weiß, dass dies ein sehr alter Thread ist, aber ich wollte diese Implementierung einfügen, die ich geschrieben habe, um das Alter zu finden, von dem ich glaube, dass es viel genauer ist.
Natürlich können Sie dies anpassen, um es in andere Formate zum Abrufen der Parameter zu passen. Ich hoffe, dies hilft jemandem, der nach einer besseren Lösung sucht.
quelle
Ich habe diesen Ansatz mit Logik anstelle von Mathematik verwendet. Es ist präzise und schnell. Die Parameter sind das Jahr, der Monat und der Tag des Geburtstages der Person. Es gibt das Alter der Person als Ganzzahl zurück.
quelle
Als ich die Beiträge von Naveen und Original OP übernahm, erhielt ich einen wiederverwendbaren Methodenstub, der sowohl Zeichenfolgen als auch / oder JS-Datumsobjekte akzeptiert.
Ich habe es benannt,
gregorianAge()
weil diese Berechnung genau angibt, wie wir das Alter mit dem Gregorianischen Kalender bezeichnen. dh das Endjahr wird nicht gezählt, wenn Monat und Tag vor dem Monat und dem Tag des Geburtsjahres liegen.quelle
Zwei weitere Optionen:
quelle
Ich habe einige auf eine vorherige Antwort aktualisiert.
Ich hoffe das hilft: D.
quelle
Hier ist eine einfache Methode zur Berechnung des Alters:
quelle
quelle
Sie können dies zur Altersbeschränkung in Ihrem Formular verwenden -
quelle
Ich bin etwas zu spät, aber ich fand, dass dies der einfachste Weg ist, ein Geburtsdatum zu berechnen.
Das HTML-Tag:
Hoffentlich hilft das.
quelle
Hier ist die einfachste und genaueste Lösung, die ich finden konnte:
Und hier ist ein Beispiel, das den 29. Februar -> 28. Februar pro Jahr berücksichtigt.
Es funktioniert sogar mit negativem Alter!
quelle
Noch eine andere Lösung:
quelle
Mit der momentjs "fromNow" -Methode können Sie mit dem formatierten Datum arbeiten, dh: 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";
Als Prototypversion
}}
quelle