2010-08-01 88 views
6

Tôi có ngày sinh trên trang web của mình theo định dạng 12.01.1980.Tuổi hiện tại của người tính toán PHP

$person_date (string) = Day.Month.Year 

Muốn thêm độ tuổi của người đó. Giống như "Hiện tại 30 năm" (2010 - 1980 = 30 năm).

Nhưng makin chức năng chỉ trên năm không thể đưa ra kết quả hoàn hảo:

Nếu người ngày tháng năm sinh là 12.12.1980 và ngày hiện tại là 01.01.2010 người không có 30 tuổi. Đó là 29 năm và một tháng.

Có phải là một tính toán trên nhắm mục tiêu cả năm, tháng và ngày tháng năm sinh với so sánh ngày hiện tại:

0) Phân tích các số ngày.

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) năm so sánh, 2010-1980 = ghi "30" (để cho nó được $total_year biến)

2) so sánh những tháng, if (ngày tháng năm sinh tháng lớn> hơn tháng hiện tại (như 12 khi sinh và 01 hiện tại)) {trừ đi một năm từ $total_year biến (30 - 1 = 29)}. Nếu làm trừ đi xảy ra, kết thúc tính toán tại thời điểm này. Khác đi tiếp theo (3 bước).

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

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

và kiểm tra ngày (ở bước này):

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) echo $ total_year;

Kiến thức php của tôi không tốt, hy vọng bạn có thể trợ giúp.

Cảm ơn.

+0

Đếm ngày giữa ngày sinh và bây giờ, nhân với 4, chia cho 1461 (thay vì chia phân cách bằng 365,25)? – pascal

+0

nó sẽ cung cấp cho một câu trả lời đúng? – James

+0

@pascal: bạn sẽ đếm số ngày như thế nào? – Svish

Trả lời

36

Bạn có thể sử dụng và phương thức diff() của mình.

<?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); 

in 29 years, 7 month, 20 days

+1

Đó là những gì tôi cần, cảm ơn người đàn ông! – James

+0

Điều này thực sự hữu ích, cảm ơn! – itsricky

6

Một phần mở rộng của câu trả lời @ VolkerK của - đó là tuyệt vời! Tôi không bao giờ thích nhìn thấy độ tuổi bằng không, điều này xảy ra nếu bạn chỉ sử dụng năm. Hàm này hiển thị tuổi của chúng theo tháng (nếu chúng là một tháng tuổi trở lên), và ngược lại trong vài ngày.

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

Làm việc tốt ở đây @jonathan. Đó là một sự mở rộng ý nghĩa thực sự phổ biến của công việc của VolkerK. Tôi sửa đổi nó một lần nữa để cung cấp cho một readout 'con người' hơn, xem dưới đây. Cảm ơn! – itsricky

2

Tôi đã mở rộng thêm câu trả lời của @ Jonathan để cung cấp phản hồi 'thân thiện với con người' hơn.

Sử dụng những ngày này:

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

Và gọi chức năng này:

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!'; 
    } 
}; 

đang trở lại:

Age: 1 years, 2 months 

dễ thương - cho những người thực sự trẻ chỉ vài ngày tuổi!

+0

$ sinh nhật phải là $ bday – ow3n

Các vấn đề liên quan