Moment.js-日付から切り上げずに、年数を取得するにはどうすればよいですか?


130

私はMoment.jsを使用して人の年齢を計算しようとしていますが、それ以外の場合は有用なfromNowメソッドが年を切り上げていることに気づきました。たとえば、今日が2012 moment("02/26/1978", "MM/DD/YYYY").fromNow()年12月27日で、人物の生年月日が1978 年2 月26日である場合、「35年前」​​を返します。Moment.jsで月数を無視して、日付からの年数(つまり34)を返すにはどうすればよいですか?

回答:



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 16

21

使用する時間間隔と結果を丸めないオプションを受け入れる差分関数があるようです。だから、のようなもの

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

私はこれを試したことはありませんし、私はその瞬間に完全に精通していませんが、これはあなたが望むものを(月をリセットする必要なしに)得るはずです。


このシナリオでは、瞬間から浮動小数点数を受け取って自分で丸める必要がないようです。モーメントはdiffを使用して年の計算の結果を正しく丸めているようです。
クリス2013年

31
ドキュメントから、2.0.0以降、moment#diffは切り捨てられた数値を返すため、必要なのは:だけですage = moment().diff(birthDate, 'years')
SuperSkunk 2013年

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 2013年

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を使用すると、涙に終わる可能性がある概算です- 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.