web-dev-qa-db-ja.com

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

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

111
aknuds1

両方の日付(指定された日付と現在)で月を1月にリセットするとうまくいくことがわかりました。

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

Moment.jsの使用は次のように簡単です。

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

追加の参照については、moment.js 公式ドキュメント を参照してください。

185
Edwin Beltran

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

単位は[秒、分、時間、日、週、月、年]です。

26
Razan Paul

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

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

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

19
user4815162342

この方法は簡単で強力です。

値は日付で、「DD-MM-YYYY」は日付のマスクです。

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

これを試して:

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

説明:

「23日前」のような文字列を受け取ります。配列に分割します:['23'、 'days'、 'ago']そして、最初の項目 '23'を取得します。

7

この方法は私には有効です。その人が今年誕生日を迎えたかどうかをチェックし、そうでなければ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);

編集:最初のバージョンは完全に機能しませんでした。更新されたものは

3

年と残りの日を表示する場合:

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

年齢の計算にモジュールを使用したくない場合

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

私はこの小さな方法を好みます。

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