Bagaimana saya bisa menghitung usia dalam tahun, mengingat tanggal lahir format YYYYMMDD? Apakah mungkin menggunakan Date()
fungsi ini?
Saya mencari solusi yang lebih baik daripada yang saya gunakan sekarang:
var dob = '19800810';
var year = Number(dob.substr(0, 4));
var month = Number(dob.substr(4, 2)) - 1;
var day = Number(dob.substr(6, 2));
var today = new Date();
var age = today.getFullYear() - year;
if (today.getMonth() < month || (today.getMonth() == month && today.getDate() < day)) {
age--;
}
alert(age);
javascript
date
Francisc
sumber
sumber
Date
harus dilakukan objek jika dienkapsulasi. Orang-orang bisa menulis buku tentang kesederhanaanDate
penanganan JS . ... Jika Anda bisa hidup dengan kadang-kadang libur sehari, maka perkiraannya:AgeInYears = Math.floor ( (now_Date - DOB_Date) / 31556952000 )
sesederhana mungkin.Jawaban:
Saya akan membaca:
Penafian: Ini juga memiliki masalah presisi, jadi ini tidak dapat sepenuhnya dipercaya. Ini bisa dimatikan beberapa jam, beberapa tahun, atau selama musim panas (tergantung zona waktu).
Sebagai gantinya saya akan merekomendasikan menggunakan perpustakaan untuk ini, jika presisi sangat penting. Juga
@Naveens post
, mungkin yang paling akurat, karena tidak bergantung pada waktu.Benchmark: http://jsperf.com/birthday-calculation/15
sumber
Coba ini.
Saya percaya satu-satunya hal yang tampak kasar pada kode Anda adalah
substr
bagian.Fiddle : http://jsfiddle.net/codeandcloud/n33RJ/
sumber
Penting: Jawaban ini tidak memberikan jawaban yang 100% akurat, tidak aktif sekitar 10-20 jam tergantung pada tanggal.
Tentu saja saya tidak bisa menahan diri untuk menerima tantangan dan membuat kalkulator ulang tahun yang lebih cepat dan lebih pendek daripada solusi yang diterima saat ini. Poin utama untuk solusi saya, adalah matematika itu cepat, jadi alih-alih menggunakan percabangan, dan model tanggal javascript menyediakan untuk menghitung solusi, kami menggunakan matematika yang luar biasa
Jawabannya terlihat seperti ini, dan berjalan ~ 65% lebih cepat dari naveen plus jauh lebih pendek:
Angka ajaib: 31557600000 adalah 24 * 3600 * 365.25 * 1000 Yang merupakan panjang tahun, panjang tahun adalah 365 hari dan 6 jam yaitu 0,25 hari. Pada akhirnya saya menemukan hasil yang memberi kita usia akhir.
Inilah tolok ukurnya: http://jsperf.com/birthday-calculation
Untuk mendukung format data OP, Anda dapat menggantinya
+new Date(dateString);
dengan
+new Date(d.substr(0, 4), d.substr(4, 2)-1, d.substr(6, 2));
Jika Anda dapat menemukan solusi yang lebih baik, silakan berbagi! :-)
sumber
dateString
argumen yang tepat untuk konstruktor Date () untuk menguraikannya dengan benar. Misalnya, mengambilYYYYMMDD
format yang saya berikan dalam pertanyaan, itu akan gagal.Dengan momentjs:
sumber
Bersihkan solusi satu-liner menggunakan ES6:
Saya menggunakan tahun 365,25 hari (0,25 karena tahun kabisat) yaitu 3,15576e + 10 milidetik (365,25 * 24 * 60 * 60 * 1000) masing-masing.
sumber
const yearInMs = 3.15576e+10 // Using a year of 365.25 days (because leap years)
Beberapa waktu lalu saya membuat fungsi dengan tujuan itu:
Dibutuhkan objek Date sebagai input, jadi Anda perlu mengurai
'YYYYMMDD'
string tanggal yang diformat:sumber
birthDate
adalah 5 Januari 1980 , dan tanggal saat ini 4 Januari 2005 , maka fungsi akan keliru melaporkanage
25 ... Nilai yang benar menjadi 24.Inilah solusi saya, cukup berikan tanggal yang dapat diuraikan:
sumber
Solusi alternatif, karena mengapa tidak:
sumber
sumber
Untuk menguji apakah ulang tahun telah berlalu atau belum, saya mendefinisikan fungsi pembantu
Date.prototype.getDoY
, yang secara efektif mengembalikan jumlah hari dalam setahun. Sisanya cukup jelas.sumber
Saya pikir itu bisa saja seperti itu:
Bekerja juga dengan stempel waktu
sumber
Saya hanya harus menulis fungsi ini untuk diri saya sendiri - jawaban yang diterima cukup bagus tetapi IMO dapat menggunakan beberapa pembersihan. Ini membutuhkan cap waktu unix untuk dob karena itu adalah persyaratan saya tetapi dapat dengan cepat disesuaikan untuk menggunakan string:
Perhatikan Saya telah menggunakan nilai tetap dari 31 pada fungsi pengukuran saya. Semua perhitungan peduli adalah bahwa "hari-of-year" menjadi ukuran timestamp yang meningkat secara monoton.
Jika menggunakan cap waktu atau string javascript, jelas Anda ingin menghapus faktor 1000.
sumber
Untuk mendapatkan usia saat tanggal Eropa telah masuk:
sumber
Satu lagi solusi yang mungkin dengan moment.js :
sumber
Saya telah memeriksa contoh yang ditunjukkan sebelumnya dan mereka tidak berfungsi dalam semua kasus, dan karena ini saya membuat skrip saya sendiri. Saya menguji ini, dan itu bekerja dengan sempurna.
sumber
Itu cara paling elegan bagi saya:
sumber
Dapatkan usia (tahun, bulan, dan hari) dari tanggal lahir dengan javascript
Fungsi calcularEdad (tahun, bulan, dan hari)
Fungsi esNumero
sumber
Bekerja sempurna untukku, kawan.
sumber
Saya tahu ini adalah utas yang sangat lama tetapi saya ingin memasukkan implementasi ini yang saya tulis untuk menemukan usia yang saya yakini jauh lebih akurat.
Tentu Anda bisa menyesuaikan ini agar sesuai dengan format lain untuk mendapatkan parameter. Semoga ini bisa membantu seseorang mencari solusi yang lebih baik.
sumber
Saya menggunakan pendekatan ini menggunakan logika, bukan matematika. Ini tepat dan cepat. Parameternya adalah tahun, bulan, dan hari ulang tahun orang tersebut. Ini mengembalikan usia seseorang sebagai bilangan bulat.
sumber
Mengadopsi dari tulisan OP naveen dan OP asli saya berakhir dengan metode rintisan yang dapat digunakan kembali yang menerima baik string dan / atau objek Date JS.
Saya menamainya
gregorianAge()
karena perhitungan ini memberikan persis bagaimana kita menunjukkan usia menggunakan kalender Gregorian. yaitu Tidak menghitung akhir tahun jika bulan dan hari sebelum bulan dan hari tahun kelahiran.sumber
Dua opsi lagi:
sumber
Saya sudah melakukan beberapa pembaruan untuk satu jawaban sebelumnya.
Saya harap ini membantu: D
sumber
di sini adalah cara sederhana menghitung usia:
sumber
sumber
Anda dapat menggunakan ini untuk batasan usia dalam formulir Anda -
sumber
Saya sedikit terlambat tetapi saya menemukan ini sebagai cara paling sederhana untuk menghitung tanggal lahir.
Tag HTML:
Semoga ini bisa membantu.
sumber
Inilah solusi paling sederhana dan paling akurat yang dapat saya berikan:
Dan di sini adalah contoh yang akan mempertimbangkan 29 Feb -> 28 Feb setahun.
Bahkan bekerja dengan usia negatif!
sumber
Solusi lain:
sumber
Dengan metode "fromNow" saat ini, ini memungkinkan Anda untuk bekerja dengan tanggal yang diformat, yaitu: 03/15/1968
var dob = document.getElementByID("dob"); var age = moment(dob.value).fromNow(true).replace(" years", "");
//fromNow(true) => suffix "ago" is not displayed //but we still have to get rid of "years";
Sebagai versi prototipe
}
sumber