Question javascript - calcul de l'âge


Avoir 2 dates javascript,

d'abord est la date de naissance et la seconde est une date pour calculer l'âge à partir de cette date.

Quelle devrait être la meilleure façon de le faire?


11
2017-11-02 09:25


origine


Réponses:


Voici un moyen:

function getAge(d1, d2){
    d2 = d2 || new Date();
    var diff = d2.getTime() - d1.getTime();
    return Math.floor(diff / (1000 * 60 * 60 * 24 * 365.25));
}
console.log( getAge(new Date(1978, 10, 3)) );

Soyez prudent avec le mois. Javascript les compte à partir de 0.
  1978, 10, 3 signifie le 3 novembre 1978


11
2017-11-02 09:52



function calculateAge (birthDate, otherDate) {
    birthDate = new Date(birthDate);
    otherDate = new Date(otherDate);

    var years = (otherDate.getFullYear() - birthDate.getFullYear());

    if (otherDate.getMonth() < birthDate.getMonth() || 
        otherDate.getMonth() == birthDate.getMonth() && otherDate.getDate() < birthDate.getDate()) {
        years--;
    }

    return years;
}

Exemple:

var age = calculateAge("02/24/1991", "02/24/2010"); // Format: MM/DD/YYYY

26
2017-11-02 09:41



function getAge(dateString) {
  var now = new Date();
  var today = new Date(now.getYear(),now.getMonth(),now.getDate());

  var yearNow = now.getYear();
  var monthNow = now.getMonth();
  var dateNow = now.getDate();

  var dob = new Date(dateString.substring(6,10),
                     dateString.substring(0,2)-1,                   
                     dateString.substring(3,5)                  
                     );

  var yearDob = dob.getYear();
  var monthDob = dob.getMonth();
  var dateDob = dob.getDate();
  var age = {};
  var ageString = "";
  var yearString = "";
  var monthString = "";
  var dayString = "";


  yearAge = yearNow - yearDob;

  if (monthNow >= monthDob)
    var monthAge = monthNow - monthDob;
  else {
    yearAge--;
    var monthAge = 12 + monthNow -monthDob;
  }

  if (dateNow >= dateDob)
    var dateAge = dateNow - dateDob;
  else {
    monthAge--;
    var dateAge = 31 + dateNow - dateDob;

    if (monthAge < 0) {
      monthAge = 11;
      yearAge--;
    }
  }

  age = {
      years: yearAge,
      months: monthAge,
      days: dateAge
      };

  if ( age.years > 1 ) yearString = " years";
  else yearString = " year";
  if ( age.months> 1 ) monthString = " months";
  else monthString = " month";
  if ( age.days > 1 ) dayString = " days";
  else dayString = " day";


  if ( (age.years > 0) && (age.months > 0) && (age.days > 0) )
    ageString = age.years + yearString + ", " + age.months + monthString + ", and " + age.days + dayString + " old.";
  else if ( (age.years == 0) && (age.months == 0) && (age.days > 0) )
    ageString = "Only " + age.days + dayString + " old!";
  else if ( (age.years > 0) && (age.months == 0) && (age.days == 0) )
    ageString = age.years + yearString + " old. Happy Birthday!!";
  else if ( (age.years > 0) && (age.months > 0) && (age.days == 0) )
    ageString = age.years + yearString + " and " + age.months + monthString + " old.";
  else if ( (age.years == 0) && (age.months > 0) && (age.days > 0) )
    ageString = age.months + monthString + " and " + age.days + dayString + " old.";
  else if ( (age.years > 0) && (age.months == 0) && (age.days > 0) )
    ageString = age.years + yearString + " and " + age.days + dayString + " old.";
  else if ( (age.years == 0) && (age.months > 0) && (age.days == 0) )
    ageString = age.months + monthString + " old.";
  else ageString = "Oops! Could not calculate age!";

  return ageString;
}

// A bit of jQuery to call the getAge() function and update the page...
$(document).ready(function() {
  $("#submitDate").click(function(e) {
    e.preventDefault();

    $("#age").html(getAge($("input#date").val()));

  });
});

and HTML IS

Date (MM / JJ / AAAA):  Calculer l'âge

Âge: 7 ans, 1 mois et 15 jours.

4
2018-04-12 07:37



Convertir la date en millisecondes depuis l’époque utilisant obtenir du temps(), puis soustrayez les valeurs et convertissez le résultat en années:

const MS_PER_YEAR = 1000 * 60 * 60 * 24 * 365.2425;
var years = Math.floor((dateNow.getTime() - dateThen.getTime()) / MS_PER_YEARS);

2
2017-11-02 09:47



Le meilleur moyen serait probablement de convertir la date en un horodatage, probablement en utilisant parse() si la date est une chaîne. Ensuite, en soustrayant simplement les nombres et en convertissant le nouveau nombre à une date en utilisant new Date(milliseconds)

Cela pourrait ne pas être trop précis pour les dates antérieures au 1/1/1970, donc la méthode alternative de soustraction des jours, des mois, etc., serait plus appropriée.


1
2017-11-02 09:38



var birth = new Date('07/11/2003');
var check = new Date();

var milliDay = 1000 * 60 * 60 * 24; // a day in milliseconds;


var ageInDays = (check - birth) / milliDay;

var ageInYears =  Math.floor(ageInDays / 365 );

Exemple http://www.jsfiddle.net/gaby/XDKa3/1/


1
2017-11-02 09:54



Si vous êtes dans un énorme projet Javascript, vous pouvez peut-être utiliser un framework ...

Avec Mootools Plus, tu as un Type de date avec un méthode diff et un méthode timeDiff cela peut correspondre à vos besoins.

Il même fournir la localisation !


1
2017-11-02 09:56



J'ai modifié la réponse de Mic pour permettre aujourd'hui d'être l'anniversaire de l'utilisateur. La différence est la date que vous vérifiez que l’âge doit être réglé à minuit de ce jour et / ou que la date actuelle doit être réglée à 23:59:59. Un exemple serait de voir si l'utilisateur a 18 ans aujourd'hui, cela reviendra 18.

function getAge(d1){
    var now = new Date();
    var d2 = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 23, 59, 59);
    var diff = d2.getTime() - d1.getTime();
    return Math.floor(diff / (1000 * 60 * 60 * 24 * 365.25));
}
console.log(getAge(new Date(1992, 10, 17, 0, 0, 0)));

0
2017-11-17 16:09



Calculer l'âge par année en cours

calculateExp(birthDate) {
    birthDate = new Date(birthDate);
    var now = new Date();
    otherDate = new Date(now.getFullYear(),now.getMonth(),now.getDate());
    var years = (otherDate.getFullYear() - birthDate.getFullYear() );


    if (otherDate.getMonth() < birthDate.getMonth() || otherDate.getMonth() == birthDate.getMonth() && otherDate.getDate() < birthDate.getDate()) {
        years--;
    }

    return years;
}

0
2018-06-07 06:05