2009-07-11 46 views
12

Tôi đang tìm một hàm tính số năm từ một ngày theo định dạng: 0000-00-00. Tìm thấy chức năng này, nhưng nó sẽ không hoạt động.Tính năm từ ngày

// Calculate the age from a given birth date 
// Example: GetAge("1986-06-18"); 
function getAge($Birthdate) 
{ 
    // Explode the date into meaningful variables 
    list($BirthYear,$BirthMonth,$BirthDay) = explode("-", $Birthdate); 
    // Find the differences 
    $YearDiff = date("Y") - $BirthYear; 
    $MonthDiff = date("m") - $BirthMonth; 
    $DayDiff = date("d") - $BirthDay; 
    // If the birthday has not occured this year 
    if ($DayDiff < 0 || $MonthDiff < 0) 
    $YearDiff--; 
} 

echo getAge('1990-04-04'); 

kết quả đầu ra không có gì:/
tôi có lỗi báo cáo về nhưng tôi không nhận được bất kỳ lỗi nào

+0

Chức năng này không có 'dòng return', do đó nó không phải bất cứ điều gì đầu ra. Trông rất không đầy đủ. – deceze

Trả lời

29

Mã của bạn không hoạt động vì chức năng không trả về bất cứ thứ gì cần in.

Theo như thuật toán đi, làm thế nào về điều này:

function getAge($then) { 
    $then_ts = strtotime($then); 
    $then_year = date('Y', $then_ts); 
    $age = date('Y') - $then_year; 
    if(strtotime('+' . $age . ' years', $then_ts) > time()) $age--; 
    return $age; 
} 
print getAge('1990-04-04'); // 19 
print getAge('1990-08-04'); // 18, birthday hasn't happened yet 

Đây là thuật toán tương tự (chỉ trong PHP) là câu trả lời chấp nhận in this question.

Một cách ngắn hơn để làm việc đó:

function getAge($then) { 
    $then = date('Ymd', strtotime($then)); 
    $diff = date('Ymd') - $then; 
    return substr($diff, 0, -4); 
} 
+0

ngọt ngào! cảm ơn bạn thưa ông –

+0

bạn có thể đi xa hơn và làm việc ra thập phân của năm ... – jsnfwlr

+0

Trong cách thứ hai để làm điều đó, bạn không nên sửa đổi đầu vào $ sau đó. Bạn nên lưu trữ nó dưới dạng biến riêng biệt. – hawaiianchimp

2

Bạn cần phải trả lại $ yearDiff, tôi nghĩ.

6

Một cách khác để làm điều này là với PHP DateTime class đó là mới như của PHP 5.2:

$birthdate = new DateTime("1986-06-18"); 
$today  = new DateTime(); 
$interval = $today->diff($birthdate); 
echo $interval->format('%y years'); 

See it in action

+0

Chỉnh sửa nhỏ: DateTime :: diff() là mới như của PHP 5.3 – turibe

1

Một đơn chức năng dòng có thể hoạt động tại đây

function calculateAge($dob) { 
    return floor((time() - strtotime($dob))/31556926); 
} 

Để tính Tuổi

$age = calculateAge('1990-07-10'); 
Các vấn đề liên quan