이것이이 질문의 가장 인기있는 형태 인 것 같아서 여기에 던질 것이라고 생각했습니다.
PHP에서 찾을 수있는 가장 인기있는 연령 유형의 3 가지에 대해 100 년 비교를하고 내 결과 (함수뿐만 아니라)를 내 블로그에 게시했습니다. .
보시다시피 , 두 번째 기능에 약간의 차이 만 있으면 3 가지 기능이 모두 프리폼됩니다. 내 결과에 근거한 나의 제안은 당신이 사람의 생일에 특정한 것을하고 싶지 않다면 3 번째 기능을 사용하는 것입니다.이 경우 첫 번째 기능은 정확하게 그렇게하는 간단한 방법을 제공합니다.
테스트에서 작은 문제가 발견되었고 두 번째 방법에서 또 다른 문제가 발견되었습니다! 곧 블로그에 업데이트! 지금은 두 번째 방법이 여전히 온라인에서 가장 인기있는 방법이지만 여전히 가장 부정확 한 방법입니다.
내 100 년 검토 후의 제안 :
생일과 같은 행사를 포함 할 수 있도록 더 길어진 것을 원한다면 :
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');
그러나 단순히 나이와 그 이상을 알고 싶다면 다음과 같이하십시오.
function getAge($date) { // Y-m-d format
return intval(substr(date('Ymd') - date('Ymd', strtotime($date)), 0, -4));
}
getAge('1980-02-29');
strtotime
방법 에 대한 주요 참고 사항 :
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()
합니다. PHPstrtotime()
가 그 형식으로 잘못 계산 한 것 같습니다 .