403 Stimmen

Berechnung des Alters anhand des Geburtsdatums im Format JJJJMMTT

Wie kann ich ein Alter in Jahren berechnen, wenn ich ein Geburtsdatum im Format JJJJMMTT habe? Ist es möglich mit Hilfe der Date() Funktion?

Ich bin auf der Suche nach einer besseren Lösung als der, die ich jetzt benutze:

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);

0voto

IshaniNet Punkte 133

Sie können dies für die Altersbeschränkung in Ihrem Formular verwenden -

function dobvalidator(birthDateString){
    strs = birthDateString.split("-");
    var dd = strs[0];
    var mm = strs[1];
    var yy = strs[2];

    var d = new Date();
    var ds = d.getDate();
    var ms = d.getMonth();
    var ys = d.getFullYear();
    var accepted_age = 18;

    var days = ((accepted_age * 12) * 30) + (ms * 30) + ds;
    var age = (((ys - yy) * 12) * 30) + ((12 - mm) * 30) + parseInt(30 - dd);

    if((days - age) <= '0'){
        console.log((days - age));
        alert('You are at-least ' + accepted_age);
    }else{
        console.log((days - age));
        alert('You are not at-least ' + accepted_age);
    }
}

0voto

zubroid Punkte 81

Dies ist meine Änderung:

  function calculate_age(date) {
     var today = new Date();
     var today_month = today.getMonth() + 1; //STRANGE NUMBERING //January is 0!
     var age = today.getYear() - date.getYear();

     if ((today_month > date.getMonth() || ((today_month == date.getMonth()) && (today.getDate() < date.getDate())))) {
       age--;
     }

    return age;
  };

0voto

Pedro Alvares Punkte 389

Ich habe diesen Ansatz mit Logik statt mit Mathematik verfolgt. Es ist präzise und schnell. Die Parameter sind das Jahr, der Monat und der Tag des Geburtstags der Person. Sie gibt das Alter der Person als Ganzzahl zurück.

function calculateAge(year, month, day) {
        var currentDate = new Date();
        var currentYear = currentDate.getFullYear();
        var currentMonth = currentDate.getUTCMonth() + 1;
        var currentDay = currentDate.getUTCDate();
        // You need to treat the cases where the year, month or day hasn't arrived yet.
        var age = currentYear - year;
        if (currentMonth > month) {
            return age;
        } else {
            if (currentDay >= day) {
                return age;
            } else {
                age--;
                return age;
            }
        }
    }

0voto

Constantin Punkte 2613

Ich glaube, dass in diesem Fall die Lesbarkeit manchmal wichtiger ist. Solange wir nicht Tausende von Feldern validieren, sollte dies genau und schnell genug sein:

function is18orOlder(dateString) {
  const dob = new Date(dateString);
  const dobPlus18 = new Date(dob.getFullYear() + 18, dob.getMonth(), dob.getDate());

  return dobPlus18 .valueOf() <= Date.now();
}

// Testing:
console.log(is18orOlder('01/01/1910')); // true
console.log(is18orOlder('01/01/2050')); // false

// When I'm posting this on 10/02/2020, so:
console.log(is18orOlder('10/08/2002')); // true
console.log(is18orOlder('10/19/2002'))  // false

Mir gefällt dieser Ansatz, anstatt eine Konstante für die Anzahl der Monate in einem Jahr zu verwenden und später mit den Schaltjahren usw. herumzuspielen. Ich lasse einfach das eingebaute Datum die Arbeit machen.

Aktualisierung, Veröffentlichung dieses Schnipsels, da er vielleicht nützlich ist. Da ich eine Maske für das Eingabefeld erzwinge, um das Format von mm/dd/yyyy und bereits zu überprüfen, ob das Datum gültig ist, in meinem Fall funktioniert dies auch, um 18+ Jahre zu überprüfen:

 function is18orOlder(dateString) {
   const [month, date, year] = value.split('/');
   return new Date(+year + 13, +month, +date).valueOf() <= Date.now();
}

0voto

ganaraj Punkte 26809

Ich weiß, dass dies ein sehr altes Thema ist, aber ich wollte diese Implementierung einfügen, die ich für die Ermittlung des Alters geschrieben habe und die meiner Meinung nach viel genauer ist.

var getAge = function(year,month,date){
    var today = new Date();
    var dob = new Date();
    dob.setFullYear(year);
    dob.setMonth(month-1);
    dob.setDate(date);
    var timeDiff = today.valueOf() - dob.valueOf();
    var milliInDay = 24*60*60*1000;
    var noOfDays = timeDiff / milliInDay;
    var daysInYear = 365.242;
    return  ( noOfDays / daysInYear ) ;
}

Natürlich können Sie dieses Verfahren auch an andere Formate anpassen, um die Parameter zu erhalten. Ich hoffe, das hilft jemandem, der nach einer besseren Lösung sucht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X