Moment.js - bagaimana saya bisa mendapatkan jumlah tahun sejak kencan, tidak dibulatkan?

130

Saya mencoba menghitung usia seseorang menggunakan Moment.js , tapi saya menemukan bahwa metode fromNow yang berguna akan bertambah selama bertahun-tahun. Misalnya, jika hari ini 12/27/2012 dan tanggal lahir orang tersebut adalah 02/26/1978, moment("02/26/1978", "MM/DD/YYYY").fromNow()mengembalikan '35 tahun yang lalu '. Bagaimana saya bisa membuat Moment.js mengabaikan jumlah bulan, dan hanya mengembalikan jumlah tahun (yaitu 34) sejak tanggal?

aknuds1
sumber

Jawaban:

216

Menggunakan moment.js semudah:

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

Untuk referensi tambahan, Anda dapat membaca dokumentasi resmi moment.js .

Edwin Beltran
sumber
30

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

jika Anda tidak ingin nilai fraksi:

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

jika Anda ingin nilai pecahan:

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

Unit bisa [detik, menit, jam, hari, minggu, bulan, tahun]

Razan Paul
sumber
3
Teknik ini dicakup oleh jawaban @ ebeltran, dan diskusi Anda tentang nilai fraksional tidak ada hubungannya dengan pertanyaan. Saya lebih suka menambahkannya sebagai komentar.
aknuds1
21

Tampaknya ada fungsi perbedaan yang menerima interval waktu untuk digunakan serta opsi untuk tidak membulatkan hasil. Jadi, kira-kira seperti itu

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

Saya belum mencoba ini, dan saya tidak sepenuhnya akrab dengan momen, tetapi sepertinya ini harus mendapatkan apa yang Anda inginkan (tanpa harus mengatur ulang bulan).

pengguna4815162342
sumber
Tampaknya Anda tidak perlu menerima nomor floating point dari saat ini dan kemudian membulatkannya sendiri, untuk skenario ini. Sepertinya saat ini benar pembulatan hasil untuk perhitungan tahun menggunakan diff.
chris
31
Dari docs, sejak 2.0.0, saat # diff akan kembali jumlah dibulatkan ke bawah, sehingga Anda hanya perlu: age = moment().diff(birthDate, 'years') .
SuperSkunk
13

Saya menemukan bahwa itu akan berhasil untuk mengatur ulang bulan ke Januari untuk kedua tanggal (tanggal yang disediakan dan sekarang):

> moment("02/26/1978", "MM/DD/YYYY").month(0).from(moment().month(0))
"34 years ago"
aknuds1
sumber
3
Dalam moment.js v2.3.1 ada metode .fromNow () yang juga bisa membantu.
Lucas Lazaro
9

Metode ini mudah dan kuat.

Nilai adalah tanggal dan "DD-MM-YYYY" adalah topeng tanggal.

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

Coba ini:

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

Penjelasan:

Kami menerima string seperti ini: '23 hari yang lalu '. Bagi ke array: ['23', 'hari', 'lalu'] dan kemudian ambil item pertama '23'.

Fyodor Khruschov
sumber
3
Posting ini secara otomatis ditandai sebagai kualitas rendah karena ini hanya kode. Maukah Anda memperluasnya dengan menambahkan beberapa teks untuk menjelaskan bagaimana menyelesaikan masalah?
Taifun
3

Metode ini bekerja untuk saya. Ini memeriksa apakah orang tersebut berulang tahun tahun ini dan mengurangi satu tahun sebaliknya.

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

Sunting: Versi pertama tidak cukup berfungsi. Yang diperbarui harus

Rickard Andersson
sumber
Ini bekerja untuk saya jika saya mengubah hari tahun ke 365,25 menjadi tahun kabisat
bschipp
menggunakan 365.25 adalah perkiraan yang bisa berakhir dengan air mata - ketikkan cal 1752untuk melihat alasannya
pgee70
2

Jika Anda tidak ingin menggunakan modul apa pun untuk perhitungan usia

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

Saat Anda ingin menampilkan tahun dan hari-hari yang tersisa:

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

Saya lebih suka metode kecil ini.

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;
}
Dagan Bog-Computers
sumber