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.
Ditemukan masalah kecil dengan tes, dan masalah lain dengan metode 2! Pembaruan segera hadir di blog! Untuk saat ini, saya perhatikan, metode ke-2 masih paling populer yang saya temukan online, namun tetap saja saya menemukan ketidakakuratan paling banyak!
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:
function getAge($date) { // Y-m-d format
$now = explode("-", date('Y-m-d'));
$dob = explode("-", $date);
$dif = $now[0] - $dob[0];
if ($dob[1] > $now[1]) { // birthday month has not hit this year
$dif -= 1;
}
elseif ($dob[1] == $now[1]) { // birthday month is this month, check day
if ($dob[2] > $now[2]) {
$dif -= 1;
}
elseif ($dob[2] == $now[2]) { // Happy Birthday!
$dif = $dif." Happy Birthday!";
};
};
return $dif;
}
getAge('1980-02-29');
Tetapi jika Anda hanya ingin tahu umur dan tidak lebih, maka:
function getAge($date) { // Y-m-d format
return intval(substr(date('Ymd') - date('Ymd', strtotime($date)), 0, -4));
}
getAge('1980-02-29');
Catatan kunci tentang strtotimemetode ini:
Note:
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. If, however, the
year is given in a two digit format and the separator is a dash (-, the date
string is parsed as y-m-d.
To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD) dates or
DateTime::createFromFormat() when possible.
mktime(). sepertinya php salah hitungstrtotime()dengan format itu.