Moment.js-반올림하지 않은 날짜 이후의 년 수는 어떻게 얻습니까?


130

Moment.js를 사용하여 사람의 나이를 계산하려고 하지만 다른 유용한 fromNow 메소드가 수년을 반올림 한다는 것을 알았 습니다. 예를 들어 오늘이 2012 moment("02/26/1978", "MM/DD/YYYY").fromNow()년 12 월 27 일이고 사람의 생년월일이 1978 년 2 월 26 일인 경우 '35 년 전 '을 반환합니다. Moment.js가 개월 수를 무시하고 날짜 이후 연도 (예 : 34)를 반환하도록하려면 어떻게해야합니까?

답변:


215

moment.js를 사용하는 것은 다음과 같이 쉽습니다.

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

추가 참조를 위해 moment.js 공식 문서를 읽을 수 있습니다 .


30

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

분수 값을 원하지 않는 경우 :

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

분수 값을 원하는 경우 :

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

단위는 [초, 분, 시간, 일, 주, 월, 년] 일 수 있습니다.


3
이 기술은 @ebeltran의 답변으로 덮여 있으며 분수 값에 대한 토론은 질문과 관련이 없습니다. 오히려 주석으로 추가하고 싶습니다.
aknuds1

21

사용할 시간 간격 과 결과를 반올림 하지 않는 옵션을 허용 하는 차이 함수 가 있는 것 같습니다. 그래서, 같은

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

나는 이것을 시도하지 않았으며, 순간에 완전히 익숙하지는 않지만, 원하는 것을 얻을 것 같습니다 (월을 재설정하지 않고도).


이 시나리오에서는 부동 소수점 숫자를 수신 한 다음 직접 반올림 할 필요가 없습니다. 모멘트가 diff를 사용하여 연도 계산 결과를 올바르게 반올림하는 것처럼 보입니다.
chris may

31
문서에서 2.0.0부터 moment # diff는 반올림 된 숫자를 반환하므로 : 만하면됩니다 age = moment().diff(birthDate, 'years') .
SuperSkunk

13

두 날짜 (제공 날짜 및 현재)에 대해 월을 1 월로 재설정하는 것이 효과가 있음을 발견했습니다.

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

3
moment.js v2.3.1에는 도움이 될 수있는 .fromNow () 메소드가 있습니다.
Lucas Lazaro

9

이 방법은 쉽고 강력합니다.

값은 날짜이고 "DD-MM-YYYY"는 날짜의 마스크입니다.

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

6

이 시도:

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

설명:

'23 일 전 '과 같은 문자열을받습니다. 배열을 [ '23', 'days', 'ago']로 나누고 첫 번째 항목 '23'을 가져옵니다.


3
이 게시물은 코드 일 뿐이므로 자동으로 품질이 낮은 것으로 표시됩니다. 문제를 해결하는 방법을 설명하기 위해 텍스트를 추가하여 확장 하시겠습니까?
Taifun

3

이 방법은 저에게 효과적입니다. 올해 생일을했는지 ​​확인하고 그렇지 않으면 1 년을 뺍니다.

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

편집 : 첫 번째 버전은 완벽하게 작동하지 않았습니다. 업데이트 된 것


윤년을 설명하기 위해 연중 날짜를 365.25로 변경하면 나에게 도움이되었습니다
bschipp

365.25를 사용하는 것은 눈물을 흘릴 수있는 근사치입니다. cal 1752이유를 보려면 유형 을 입력 하십시오.
pgee70

2

연령 계산에 모듈을 사용하지 않으려는 경우

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

2

연도 및 남은 요일을 표시하려는 경우 :

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

0

이 작은 방법을 선호합니다.

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;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.