2012-04-17 10 views
1

ユーザーの生年月日から年齢を算出する最も正確な関数は何ですか?私は次のコードを持っていて、すべての日付形式をサポートしていないし、最も正確な関数(DateTimeの準拠がうまくいくかどうか)がわからないため、改善する方法が不思議に思っていた。PHPの生年月日を計算する

function getAge($birthday) { 
    return floor((strtotime(date('d-m-Y')) - strtotime($date))/(60*60*24*365.2421896)); 
} 
+0

[this](http://www.php.net/manual/en/datetime.diff.php?)? –

+4

この機能は機能しますか?ハァッ? '$ birthday'を使わずに年齢を計算するこの関数のように見える –

+0

年齢は整数年ですか? – Femi

答えて

10
$birthday = new DateTime($birthday); 
$interval = $birthday->diff(new DateTime); 
echo $interval->y; 

+0

ありがとうございますが、それはありません –

+1

"does not"はエラーメッセージではありません。特に最初の行がうまく動作する場合は、 '$ date'がどのように見えるかに大きく依存します。 http://php.net/datetime.createfromformat - ちょうどそれをテストしました:うまく動作します。 – KingCrunch

+0

このメソッドのキャッチは次のとおりです。たとえば、今日が2014年9月23日であれば、 1988年9月20日に生まれた人は26歳、1988年9月25日に生まれた人は25歳です。これは技術的には正解ですが、それは期待される答えではないかもしれません。私たちは年だけを表示しているので、大きな違いがあります。これはおそらく、@ user955822でうまくいかなかった理由です。年齢を計算する前に「BOD on date」を決めるのは常に良いことです。 –

0

を動作するはずこれは動作します:あなたがあなたの$birthday変数が来てどのような形式で教えている場合

<? 
$date = date_create('1984-10-26'); 
$interval = $date->diff(new DateTime); 
echo $interval->y; 
?> 

は、私はあなたに厳密解

0

変更$dateを与えます$birthday

0

WTF?

のstrtotime(日付( 'D-M-Y'))

だから戻って、タイムスタンプに日付文字列を変換し、その後、現在のタイムスタンプから日付文字列を生成しますか?

ところで、strtotime()は数字の日付をm/d/yの形式(つまり、最初に米国の日付の形式)にすると仮定しています。別の理由は、パラメータ($ birthday)が数式で使用されていないということです。

2

このためDateTimeを使用してみてください:

$now  = new DateTime(); 
$birthday = new DateTime('1973-04-18 09:48:00'); 
$interval = $now->diff($birthday); 
echo $interval->format('%y years'); // 39 years 

See it in action

0

夕食精度のためにあなたがうるう年要因を考慮する必要があります。

function get_age($dob_day,$dob_month,$dob_year){ 
    $year = gmdate('Y'); 
    $month = gmdate('m'); 
    $day = gmdate('d'); 
    //seconds in a day = 86400 
    $days_in_between = (mktime(0,0,0,$month,$day,$year) - mktime(0,0,0,$dob_month,$dob_day,$dob_year))/86400; 
    $age_float = $days_in_between/365.242199; // Account for leap year 
    $age = (int)($age_float); // Remove decimal places without rounding up once number is + .5 
    return $age; 
} 

ので使用:

echo get_date(31,01,1985); 

または何でも...

N.B.小数点までの年齢を確認するには

return $age_float 

9

チェックはこの

<?php 
$c= date('Y'); 
$y= date('Y',strtotime('1988-12-29')); 
echo $c-$y; 
?> 
+1

このコードがなぜ機能するのかを説明するためにナラティブを追加することを検討してください。これは、質問をしている人や、一緒に来る人には非常に役立ちます。 –

+1

それは私のために働いてくれてありがとう – humphrey

+1

私は周りに来て、簡単な解決策を探して、それは動作し、説明は必要ありません、それは自明です。このコードをありがとうございます。 –

0

この機能が正常に動作します。

function age($birthday){ 
list($day,$month,$year) = explode("/",$birthday); 
$year_diff = date("Y") - $year; 
$month_diff = date("m") - $month; 
$day_diff = date("d") - $day; 
if ($day_diff < 0 && $month_diff==0){$year_diff--;} 
if ($day_diff < 0 && $month_diff < 0){$year_diff--;} 
return $year_diff; 
} 

See BLOG Post

3

、年を含む完全な年齢を持っているために、このコードを使用して数ヶ月、ここ

<?php 
    //full age calulator 
    $bday = new DateTime('02.08.1991');//dd.mm.yyyy 
    $today = new DateTime('00:00:00'); // Current date 
    $diff = $today->diff($bday); 
    printf('%d years, %d month, %d days', $diff->y, $diff->m, $diff->d); 
    ?> 
0

をdays-私の長い/詳細版は、(あなたがしたい場合は、あなたがそれを短くすることができます)です:

$timestamp_birthdate = mktime(9, 0, 0, $birthdate_month, $birthdate_day, $birthdate_year); 
$timestamp_now = time(); 
$difference_seconds = $timestamp_now-$timestamp_birthdate; 
$difference_minutes = $difference_seconds/60; 
$difference_hours = $difference_minutes/60; 
$difference_days = $difference_hours/24; 
$difference_years = $difference_days/365; 

私は答えが遅いですか? :D

関連する問題