Próbuję obliczyć wiek osoby za pomocą Moment.js , ale okazuje się , że metoda fromNow, skądinąd użyteczna , zaokrągla lata. Na przykład, jeśli dzisiaj jest 27 grudnia 2012 r., A data urodzenia osoby to 26 lutego 1978 r., moment("02/26/1978", "MM/DD/YYYY").fromNow()
Zwraca „35 lat temu”. Jak sprawić, by Moment.js ignorował liczbę miesięcy i po prostu zwracał liczbę lat (tj. 34) od daty?
javascript
date
momentjs
aknuds1
źródło
źródło
Wydaje się, że istnieje funkcja różnicująca, która akceptuje przedziały czasowe do użycia, a także opcję nie zaokrąglania wyniku. Więc coś w stylu
Math.floor(moment(new Date()).diff(moment("02/26/1978","MM/DD/YYYY"),'years',true)))
Nie próbowałem tego i nie jestem do końca zaznajomiony z chwilą, ale wydaje się, że powinno to uzyskać to, czego chcesz (bez konieczności resetowania miesiąca).
źródło
age = moment().diff(birthDate, 'years')
.Stwierdziłem, że działałoby zresetowanie miesiąca do stycznia dla obu dat (podanej daty i teraźniejszości):
> moment("02/26/1978", "MM/DD/YYYY").month(0).from(moment().month(0)) "34 years ago"
źródło
Ta metoda jest łatwa i wydajna.
Wartość to data, a „DD-MM-RRRR” to maska daty.
moment().diff(moment(value, "DD-MM-YYYY"), 'years');
źródło
Spróbuj tego:
moment("02/26/1978", "MM/DD/YYYY").fromNow().split(" ")[0];
Wyjaśnienie:
Otrzymujemy ciąg podobny do tego: „23 dni temu”. Podziel go na tablicę: [„23”, „dni”, „temu”], a następnie weź pierwszy element „23”.
źródło
Ta metoda działa dla mnie. Sprawdza, czy dana osoba obchodziła urodziny w tym roku i w przeciwnym razie odejmuje rok.
// 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);
Edycja: pierwsza wersja nie działała idealnie. Zaktualizowany powinien
źródło
cal 1752
aby zobaczyć, dlaczegoJeśli nie chcesz używać żadnego modułu do obliczania wieku
var age = Math.floor((new Date() - new Date(date_of_birth)) / 1000 / 60 / 60 / 24 / 365.25)
źródło
Jeśli chcesz pokazać lata i pozostałe dni:
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');
źródło
Wolę tę małą metodę.
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; }
źródło