これはこの質問の最も人気のある形式のように思われるので、ここにこれを投げると考えました。
私は、PHPで見つけることができる最も人気のある3種類の年齢関数を100年比較し、結果(および関数)をブログに投稿しました。
あなたが見ることができるように存在し、すべての3つのfuncsは、第二の機能上だけのわずかな違いでもプリフォーム。私の結果に基づいた私の提案は、人の誕生日に特定のことをしたくない場合を除いて、3番目の関数を使用することです。
テストに関する小さな問題と2番目の方法に関する別の問題が見つかりました!ブログは近日更新予定!とりあえず、2番目の方法はオンラインで見つけた最も人気のある方法ですが、それでも最も不正確な方法を見つけています。
私の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()
。いつかは、使用する必要があるその形式についてです。PHPはstrtotime()
そのフォーマットで誤って計算されたようです。