wake-up-neo.com

Moment.js - wie bekomme ich die Anzahl der Jahre seit einem Datum, nicht gerundet?

Ich versuche, das Alter einer Person mit Moment.js zu berechnen, finde aber, dass die sonst nützliche fromNow - Methode die Jahre abrundet. Wenn zum Beispiel heute der 27.12.2012 ist und das Geburtsdatum der Person 26.02.1978 ist, gibt moment("02/26/1978", "MM/DD/YYYY").fromNow() '35 Jahre zurück' zurück. Wie kann ich machen, dass Moment.js die Anzahl der Monate ignoriert und einfach die Anzahl der Jahre (d. H. 34) seit dem Datum zurückgibt?

96
aknuds1

Ich stellte fest, dass es funktionieren würde, den Monat für beide Datumsangaben (das angegebene Datum und das Geschenk) auf Januar zurückzusetzen:

> moment("02/26/1978", "MM/DD/YYYY").month(0).from(moment().month(0))
"34 years ago"
12
aknuds1

Die Verwendung von moment.js ist so einfach wie:

var years = moment().diff('1981-01-01', 'years');
var days = moment().diff('1981-01-01', 'days');

Für weitere Informationen lesen Sie moment.js offizielle Dokumentation .

160
Edwin Beltran

http://jsfiddle.net/xR8t5/27/

wenn Sie keine Bruchwerte wünschen:

var years = moment().diff('1981-01-01', 'years',false);
alert( years);

wenn Sie einen Bruchwert wünschen:

var years = moment().diff('1981-01-01', 'years',true);
alert( years);

Einheiten können [Sekunden, Minuten, Stunden, Tage, Wochen, Monate, Jahre] sein.

23
Razan Paul

Es scheint eine Differenzfunktion zu geben , die Zeitintervalle zur Verwendung akzeptiert, sowie eine Option, um nicht das Ergebnis abzurunden. So etwas wie 

Math.floor(moment(new Date()).diff(moment("02/26/1978","MM/DD/YYYY"),'years',true)))

Ich habe es nicht ausprobiert, und ich bin mit dem Moment nicht ganz vertraut, aber es scheint, als würde es das bekommen, was Sie wollen (ohne den Monat neu einstellen zu müssen).

18
user4815162342

Diese Methode ist einfach und leistungsstark.

Wert ist ein Datum und "DD-MM-JJJJ" ist die Maske des Datums.

moment().diff(moment(value, "DD-MM-YYYY"), 'years');
10
user2327748

Versuche dies: 

 moment("02/26/1978", "MM/DD/YYYY").fromNow().split(" ")[0];

Erläuterung:

Wir erhalten eine Zeichenfolge wie "vor 23 Tagen". Teilen Sie es in Array: ['23', 'days', 'ago'] und nehmen Sie dann den ersten Punkt '23'.

7

Wenn Sie kein Modul zur Altersberechnung verwenden möchten

var age = Math.floor((new Date() - new Date(date_of_birth)) / 1000 / 60 / 60 / 24 / 365.25)
2
Ankit

Diese Methode funktioniert für mich. Es wird geprüft, ob die Person in diesem Jahr Geburtstag hat und ansonsten ein Jahr abgezogen wird.

// date is the moment you're calculating the age of
var now = moment().unix();
var then = date.unix();
var diff = (now - then) / (60 * 60 * 24 * 365);
var years = Math.floor(diff);

Edit: Erste Version funktionierte nicht perfekt. Das aktualisierte sollte man

2

Wenn Sie Jahre und die verbleibenden Tage anzeigen möchten:

var m = moment(d.birthday.date, "DD.MM.YYYY");
var years = moment().diff(m, 'years', false);
var days = moment().diff(m.add(years, 'years'), 'days', false);
alert(years + ' years, ' + days + ' days');
1
Xdg

Ich bevorzuge diese kleine Methode.

function getAgeFromBirthday(birthday) {
    if(birthday){
      var totalMonths = moment().diff(birthday, 'months');
      var years = parseInt(totalMonths / 12);
      var months = totalMonths % 12;
        if(months !== 0){
           return parseFloat(years + '.' + months);
         }
    return years;
      }
    return null;
}
0