2010-08-01 4 views
6

나는 내 사이트의 생일은 12.01.1980입니다.PHP는 사람의 현재 나이를 계산합니다

$person_date (string) = Day.Month.Year 

사람의 고향을 추가하고 싶습니다. "현재 30 년"(2010 - 1980 = 30 년)과 같습니다. 사람의 생년월일이 12.12.1980하고 현재 날짜는 사람이 30 살이없는 01.01.2010입니다

경우

그러나 만들고 기능 방금 년은 완벽한 결과를 제공 할 수 없습니다. 29 년 1 개월입니다.

0) 날짜를 구문 분석 :

는 현재 날짜를 비교하여 두 년, 월 출생의 일을 대상에 대한 계산이 있어야합니다.

Birth date (Day.Month.Year): 
Day = $birth_day; 
Month = $birth_month; 
Year = $birth_year; 

Current date (Day.Month.Year): 
Day = $current_day; 
Month = $current_month; 
Year = $current_year; 

1) 년 비교, 2010-1980 = 쓰기 "30"((이 $total_year 변수) (생년월일 달이 더 큰 경우

2) 현재 월보다>, 달을 비교하자 같은 출생 12 및 현재 01)) {$total_year 변수 (30 - 1 = 29)에서 1 년을 뺀 값입니다. 마이너스가 발생하면이 시점에서 계산을 마칩니다. 그렇지 않으면 다음 단계로 넘어갑니다 (3 단계).

3)

else if (birth month < current month) { $total_year = $total_year (30); }

4) else if (birth month = current month) { $total_year = $total_year (30); }

및()이 단계의 확인 일 :

if(birth day = current day) { $total_year = $total_year; } 
else if (birth day > current day) { $total_year = $total_year -1; } 
else if (birth day < current day) { $total_year = $total_year; } 

5) $ total_year 에코;

내 PHP 지식이 좋지 않아, 도움을 받으실 수 있기를 바랍니다.

감사합니다.

+0

생년월일과 지금 사이의 일수를 4로 곱하고 1461로 나누십시오 (365.25로 실수 나누기 대신)? – pascal

+0

옳은 대답을 줄 것입니까? – James

+0

@ 파스칼 : 어떻게 계산합니까? – Svish

답변

36

및 그 diff() 방법을 사용할 수 있습니다.

<?php 
$bday = new DateTime('12.12.1980'); 
// $today = new DateTime('00:00:00'); - use this for the current date 
$today = new DateTime('2010-08-01 00:00:00'); // for testing purposes 

$diff = $today->diff($bday); 

printf('%d years, %d month, %d days', $diff->y, $diff->m, $diff->d); 

인쇄 29 years, 7 month, 20 days

+1

그게 내가 필요로하는 것, 고마워요! – James

+0

이것은 정말 도움이됩니다, 감사합니다! – itsricky

6

@ VolkerK의 대답의 확장 - 우수! 저는 제로를 보는 것을 결코 좋아하지 않습니다. 당신이 오직 한해를 사용한다면 일어납니다. 이 함수는 연령을 개월 단위로 표시하고 (한 달 이상 된 경우), 그렇지 않으면 일 단위로 표시합니다.

function calculate_age($birthday) 
{ 
    $today = new DateTime(); 
    $diff = $today->diff(new DateTime($birthday)); 

    if ($diff->y) 
    { 
     return $diff->y . ' years'; 
    } 
    elseif ($diff->m) 
    { 
     return $diff->m . ' months'; 
    } 
    else 
    { 
     return $diff->d . ' days'; 
    } 
} 
+1

좋은 일을 여기 @ 조나단. VolkerK의 작품이 정말로 상식적으로 확장되었습니다. 나는 아래의 더 많은 '인간'판독 값을주기 위해 그것을 다시 수정했다. 감사! – itsricky

2

나는 '인간 친화적 인'답변을 더 많이 제공하기 위해 @ Jonathan의 대답을 더욱 확장했습니다.

$birthday= new DateTime('2011-11-21'); 
//Your date of birth. 

그리고이 함수를 호출 :

이 날짜를 사용하여

function calculate_age($birthday) 
{ 
    $today = new DateTime(); 
    $diff = $today->diff(new DateTime($birthday)); 

    if ($diff->y) 
    { 
     return 'Age: ' . $diff->y . ' years, ' . $diff->m . ' months'; 
    } 
    elseif ($diff->m) 
    { 
     return 'Age: ' . $diff->m . ' months, ' . $diff->d . ' days'; 
    } 
    else 
    { 
     return 'Age: ' . $diff->d . ' days old!'; 
    } 
}; 

가 반환 :

Age: 1 years, 2 months 

귀여운 - 단 몇 일 이전 정말 젊은 사람을 위해!

+0

$ 생일은 $ bday 여야합니다. – ow3n