Alle oben genannten Antworten haben nur eines gelöst: zwei Daten zu vergleichen.
Sie scheinen in der Tat die Antworten auf die Frage zu sein, aber es fehlt ein großer Teil:
Was ist, wenn ich überprüfen möchte, ob eine Person das 18. Lebensjahr vollendet hat?
Leider ist KEINE der oben genannten Antworten in der Lage, diese Frage zu beantworten.
Die aktuelle Uhrzeit (etwa zu dem Zeitpunkt, an dem ich diese Zeilen schreibe) ist zum Beispiel Fri Jan 31 2020 10:41:04 GMT-0600 (Central Standard Time), während ein Kunde sein Geburtsdatum als "01/31/2002" eingibt.
Wenn wir die "365 Tage/Jahr" das ist "31536000000" Millisekunden, würden wir das folgende Ergebnis erhalten:
let currentTime = new Date();
let customerTime = new Date(2002, 1, 31);
let age = (currentTime.getTime() - customerTime.getTime()) / 31536000000
console.log("age: ", age);
mit dem folgenden Ausdruck:
age: 17.92724710838407
Aber RECHTLICH ist dieser Kunde bereits 18 Jahre alt. Selbst wenn er "30.01.2002" eingibt, wäre das Ergebnis immer noch
age: 17.930039743467784
was weniger als 18 ist. Das System würde den Fehler "minderjährig" melden.
Und so würde es weitergehen für "29.01.2002", "28.01.2002", "27.01.2002" ... "01/05/2002", BIS "01/04/2002".
Ein solches System würde alle Kunden, die vor 18 Jahren, 0 Tagen und 18 Jahren, 26 Tagen geboren wurden, einfach umbringen, weil sie rechtlich gesehen 18 Jahre alt sind, während das System "minderjährig" anzeigt.
Im Folgenden finden Sie eine Antwort auf eine solche Frage:
invalidBirthDate: 'Invalid date. YEAR cannot be before 1900.',
invalidAge: 'Invalid age. AGE cannot be less than 18.',
public static birthDateValidator(control: any): any {
const val = control.value;
if (val != null) {
const slashSplit = val.split('-');
if (slashSplit.length === 3) {
const customerYear = parseInt(slashSplit[0], 10);
const customerMonth = parseInt(slashSplit[1], 10);
const customerDate = parseInt(slashSplit[2], 10);
if (customerYear < 1900) {
return { invalidBirthDate: true };
} else {
const currentTime = new Date();
const currentYear = currentTime.getFullYear();
const currentMonth = currentTime.getMonth() + 1;
const currentDate = currentTime.getDate();
if (currentYear - customerYear < 18) {
return { invalidAge: true };
} else if (
currentYear - customerYear === 18 &&
currentMonth - customerMonth < 0) {
return { invalidAge: true };
} else if (
currentYear - customerYear === 18 &&
currentMonth - customerMonth === 0 &&
currentDate - customerDate < 0) {
return { invalidAge: true };
} else {
return null;
}
}
}
}
}
20 Stimmen
Wenn es um DateTime und Manipulation in JS geht, suche ich nicht weiter als momentjs :)
101 Stimmen
Keine Notwendigkeit, Momentjs zu verwenden, um 2 Daten zu vergleichen. Verwenden Sie einfach reines Javascript's Date Objekt. Prüfen Sie die Hauptantwort für weitere Details.
0 Stimmen
Sie können die folgende Antwort lesen: stackoverflow.com/questions/4812152/ Prüfen Sie getDateDifference und getDifferenceInDays, ob es helfen kann.
0 Stimmen
Ich werde Ihnen einen Grund geben, weiter als Moment.js zu schauen ( was ich liebe, ABER... ): Nicht für Schleifenlasten verwenden
0 Stimmen
Für eine nützliche Funktion um die Uhrzeit zu erfahren Differenz getrennt nach Einheiten (Sekunden, Minuten, Stunden, usw.), siehe die Antwort unter stackoverflow.com/questions/1968167/ . Diese Antwort ist jetzt auch verfügbar unter stackoverflow.com/a/46529159/3787376 .
9 Stimmen
Für diejenigen, die wie ich erst später dazugekommen sind, ist moment.js jetzt im "Wartungsmodus". d.h. nicht mehr aktiv entwickelt werden.
1 Stimmen
Für diejenigen, die noch später dazugekommen sind, ist moment.js nicht nur im Wartungsmodus, sondern auch eine riesige Bibliothek (4,21 MB!). Wenn Sie nur einfache Funktionen wie den Vergleich von zwei Daten benötigen, können Sie eine kleine (20kb) Bibliothek ausprobieren, an der ich gearbeitet habe npmjs.com/package/easy-dates