Saya sedang mencari cara untuk menghitung usia seseorang, mengingat DOB mereka dalam format dd / mm / yyyy.
Saya menggunakan fungsi berikut yang bekerja dengan baik selama beberapa bulan sampai semacam kesalahan menyebabkan loop sementara tidak pernah berakhir dan menggiling seluruh situs terhenti. Karena ada hampir 100.000 DOB melalui fungsi ini beberapa kali sehari, sulit untuk menentukan apa yang menyebabkan ini.
Adakah yang punya cara lebih andal dalam menghitung usia?
//replace / with - so strtotime works
$dob = strtotime(str_replace("/","-",$birthdayDate));
$tdate = time();
$age = 0;
while( $tdate > $dob = strtotime('+1 year', $dob))
{
++$age;
}
return $age;
EDIT: fungsi ini tampaknya berfungsi OK beberapa waktu, tetapi mengembalikan "40" untuk DOB 14/09/1986
return floor((time() - strtotime($birthdayDate))/31556926);
mktime()
. sepertinya php salah hitungstrtotime()
dengan format itu.strtotime
benar - benar memahami format tanggal, Anda tidak perlu khawatir:Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed.
php.net/manual/en/function.strtotime.phpPada PHP 5.3.0 Anda dapat menggunakan berguna
DateTime::createFromFormat
untuk memastikan bahwa tanggal Anda tidak mendapatkan kesalahan untukm/d/Y
format danDateInterval
kelas (viaDateTime::diff
) untuk mendapatkan jumlah tahun antara sekarang dan tanggal target.sumber
sumber
Saya menggunakan Tanggal / Waktu untuk ini:
sumber
Metode sederhana untuk menghitung Usia dari dob:
31556926
adalah jumlah detik dalam setahun.sumber
$_age = floor((time() - strtotime('1986-09-16')) / 31556926);
// Kalkulator Usia
sumber
Saya menemukan ini berhasil dan sederhana.
Kurangi dari 1970 karena strtotime menghitung waktu dari 1970-01-01 ( http://php.net/manual/en/function.strtotime.php )
Hasil:
sumber
Jika Anda ingin menghitung Usia menggunakan dob, Anda juga dapat menggunakan fungsi ini. Ini menggunakan objek DateTime.
sumber
Kupikir aku akan melemparkan ini ke sini karena ini sepertinya bentuk paling populer dari pertanyaan ini.
Saya menjalankan perbandingan 100 tahun pada 3 jenis fungsi funcs usia paling populer yang dapat saya temukan untuk PHP dan memposting hasil saya (serta fungsinya) ke blog saya .
Seperti yang Anda lihat di sana , semua 3 fungsi tampil dengan baik dengan hanya sedikit perbedaan pada fungsi ke-2. Saran saya berdasarkan hasil saya adalah menggunakan fungsi ke-3 kecuali jika Anda ingin melakukan sesuatu yang spesifik pada hari ulang tahun seseorang, dalam hal ini fungsi ke-1 menyediakan cara sederhana untuk melakukan hal itu.
Saran saya setelah ulasan 100 tahun saya:
Jika Anda menginginkan sesuatu yang lebih memanjang sehingga Anda dapat memasukkan acara-acara seperti ulang tahun dan semacamnya:
Tetapi jika Anda hanya ingin tahu umur dan tidak lebih, maka:
Lihat BLOG
Catatan kunci tentang
strtotime
metode ini:sumber
Anda dapat menggunakan
Carbon
perpustakaan , yang merupakan ekstensi API untuk DateTime.Kamu bisa:
atau:
sumber
age
, yang melakukan adiffInYears
. Jadi, Anda dapat menulis:(new \Carbon\Carbon($date))->age
Jika Anda tidak membutuhkan ketelitian tinggi, hanya beberapa tahun, Anda dapat mempertimbangkan untuk menggunakan kode di bawah ini ...
Anda hanya perlu memasukkan ini ke dalam fungsi dan mengganti tanggal "1971-11-20" dengan variabel.
Harap perhatikan bahwa ketepatan kode di atas tidak tinggi karena tahun kabisat, yaitu setiap 4 tahun setiap harinya adalah 366 bukannya 365. Ekspresi 60 * 60 * 24 * 365 menghitung jumlah detik dalam satu tahun - Anda dapat ganti dengan 31536000.
Hal penting lainnya adalah bahwa karena penggunaan Timestamp UNIX memiliki masalah Tahun 1901 dan Tahun 2038 yang berarti ungkapan di atas tidak akan berfungsi dengan benar untuk tanggal sebelum tahun 1901 dan setelah tahun 2038.
Jika Anda dapat hidup dengan batasan yang disebutkan di atas, kode itu akan bekerja untuk Anda.
sumber
sumber
sumber
Saya menemukan skrip ini dapat diandalkan. Dibutuhkan format tanggal sebagai YYYY-mm-dd, tetapi dapat dimodifikasi untuk format lain dengan cukup mudah.
sumber
sumber
i18n:
sumber
Coba salah satu dari ini menggunakan objek DateTime
Referensi http://www.calculator.net/age-calculator.html
sumber
Tulis skrip PHP untuk menghitung usia seseorang saat ini.
Tanggal lahir sampel: 11.4.1987
Solusi sampel:
Kode PHP:
Output sampel:
Umur Anda: 30 tahun, 3 bulan, 0 hari
sumber
ini adalah fungsi saya untuk menghitung DOB dengan pengembalian spesifik usia berdasarkan tahun, bulan, dan hari
ini cara menggunakannya
sumber
Fungsi ini akan mengembalikan usia dalam beberapa tahun. Nilai input adalah tanggal diformat (YYYY-MM-DD) hari dari string kelahiran misalnya: 2000-01-01
Ia bekerja dengan ketepatan hari
Ceria, nira
sumber
Jika Anda tampaknya tidak dapat menggunakan beberapa fungsi yang lebih baru, inilah sesuatu yang saya coba. Mungkin lebih dari yang Anda butuhkan, dan saya yakin ada cara yang lebih baik, tetapi mudah dibaca, sehingga harus melakukan pekerjaan:
Contoh Penggunaan:
Semoga ini membantu.
sumber
Karena tahun kabisat, tidak bijaksana hanya mengurangi satu tanggal dari yang lain dan menambahkannya ke beberapa tahun. Untuk menghitung usia seperti manusia, Anda akan membutuhkan sesuatu seperti ini:
sumber
Berikut ini berfungsi baik untuk saya dan tampaknya jauh lebih sederhana daripada contoh-contoh yang telah diberikan.
Saya telah menguji dan secara aktif menggunakan kode ini, mungkin terlihat sedikit rumit tetapi sangat mudah digunakan dan diedit dan cukup akurat.
sumber
Mengikuti logika pertama, Anda harus menggunakan = dalam perbandingan.
sumber
Ini adalah masalah ketika Anda menggunakan strtotime dengan DD / MM / YYYY. Anda tidak dapat menggunakan format itu. Alih-alih, Anda dapat menggunakan MM / DD / YYYY (atau banyak lainnya seperti YYYYMMDD atau YYYY-MM-DD) dan itu harus berfungsi dengan baik.
sumber
Bagaimana dengan meluncurkan kueri ini dan membuat MySQL menghitungnya untuk Anda:
Hasil:
Pengguna memiliki 27 tahun dan 6 bulan (ini dihitung satu bulan penuh)
sumber
Saya melakukannya seperti ini.
sumber
Jawaban teratas untuk ini adalah OK tetapi hanya kalualit tahun seseorang dilahirkan, saya men-tweak itu untuk tujuan saya sendiri untuk berolahraga hari dan bulan. Tetapi saya pikir itu layak untuk dibagikan.
Ini berfungsi dengan mengambil stempel waktu pengguna DOB, tetapi jangan ragu untuk mengubahnya
sumber
Jika Anda hanya ingin mendapatkan sepenuhnya usia, ada cara supersimple untuk melakukan itu. perlakukan tanggal yang diformat sebagai 'YYYYMMDD' sebagai angka dan kurangi. Setelah itu membatalkan bagian MMDD dengan membagi hasilnya dengan 10.000 dan lantai itu. Sederhana dan tidak pernah gagal, bahkan memperhitungkan leapyears dan waktu server Anda saat ini;)
Sejak ulang tahun atau sebagian besar disediakan oleh tanggal lengkap di lokasi kelahiran dan mereka relevan dengan WAKTU LOKAL SAAT INI (di mana pemeriksaan usia sebenarnya dilakukan).
jadi jika Anda ingin memeriksa apakah seseorang berusia 18 atau 21 atau di bawah 100 di zona waktu Anda (jangan lupa zona waktu asal) pada hari ulang tahun, ini adalah cara saya untuk melakukan ini
sumber
Coba ini :
sumber