Hình tôi sẽ ném nó ở đây vì đây dường như là hình thức phổ biến nhất của câu hỏi này.
Tôi đã chạy một so sánh 100 năm về 3 loại funcs phổ biến nhất mà tôi có thể tìm thấy cho PHP và đăng kết quả của mình (cũng như các chức năng) lên blog của mình .
Như bạn có thể thấy ở đó , cả 3 funcs đều hoạt động tốt chỉ với một chút khác biệt về chức năng thứ 2. Đề xuất của tôi dựa trên kết quả của tôi là sử dụng chức năng thứ 3 trừ khi bạn muốn làm điều gì đó cụ thể vào ngày sinh nhật của một người, trong trường hợp đó, chức năng thứ 1 cung cấp một cách đơn giản để thực hiện chính xác điều đó.
Tìm thấy vấn đề nhỏ với thử nghiệm, và một vấn đề khác với phương pháp thứ 2! Cập nhật sắp tới blog! Hiện tại, tôi xin lưu ý, phương pháp thứ 2 vẫn là phương pháp phổ biến nhất mà tôi tìm thấy trên mạng, nhưng vẫn là phương pháp tôi đang tìm thấy không chính xác nhất!
Đề xuất của tôi sau khi xem xét 100 năm của tôi:
Nếu bạn muốn một cái gì đó kéo dài hơn để bạn có thể bao gồm các dịp như sinh nhật và như vậy:
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');
Nhưng nếu bạn chỉ đơn giản là muốn biết tuổi và không có gì hơn, thì:
function getAge($date) { // Y-m-d format
return intval(substr(date('Ymd') - date('Ymd', strtotime($date)), 0, -4));
}
getAge('1980-02-29');
Một lưu ý chính về strtotime
phương pháp:
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()
. Có vẻ như php đã tính toán saistrtotime()
với định dạng đó.