2010-08-01 4 views
6

Sitemde doğum tarihlerini yaşıyorum 12.01.1980.PHP o kişinin geçerli yaşı hesapla

$person_date (string) = Day.Month.Year 

Kişinin bir eskiliğini eklemek ister. "Halihazırda 30 yıl" (2010 - 1980 = 30 yıl) gibi. kişi doğum tarihi 12.12.1980 ve geçerli tarih kişi 30 yaşında yok 01.01.2010 olduğunu

ise:

Ama makin fonksiyonu sadece üzerinde yıllar mükemmel bir sonuç veremez. 29 yıl ve bir ay.

0) tarihleri ​​Ayrıştırma:

geçerli tarih karşılaştırılması hem yıl, ay ve doğum günühedefleyen bir hesaplama olmalı.

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) yıl karşılaştırma, 2010-1980 = yazma "30" ((o $total_year değişken) (doğum tarihi ay büyükse

2) geçerli ay daha>, aylar karşılaştırmak olalım gibi 12 doğumda ve 01 akımda)) {eksi $total_year değişkeninden bir yıl (30 - 1 = 29)}. Eksi olduysa, bu noktada hesaplamaları tamamlayın. Başka bir sonraki (3 adım) gidin.

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

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

ve(), bu aşamada gün kontrol:

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 yankı;

Benim php bilgim iyi değil, umarım yardımcı olabilirsiniz.

Teşekkürler.

+0

Doğum tarihi ile şimdi arasındaki günleri sayın, 4 ile çarpın, 1461'e bölün (yerine bölme 365.25'e bölünür)? – pascal

+0

Doğru bir cevap verecek mi? – James

+0

@pascal: Günleri nasıl sayarsın? – Svish

cevap

36

ve diff() yöntemini kullanabilirsiniz.

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

baskılar 29 years, 7 month, 20 days

+1

İhtiyacım olan şey, teşekkürler dostum! – James

+0

Bu gerçekten yararlı, teşekkürler! – itsricky

6

@ VolkerK cevabı bir uzantısı - mükemmel! Sıfır yaşında görmeyi asla sevmem. Bu sadece seneyi kullanırsan olur. Bu işlev, yaşlarını aylar (bir ay veya daha uzunsa) ve günler içinde gösterir.

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

Güzel iş burada @ jonathan. VolkerK'ın çalışmalarının gerçekten yaygın bir uzantısı. Daha fazla 'insan' okuması vermek için tekrar değiştirdim, aşağıya bakın. Teşekkürler! – itsricky

2

Daha fazla 'insan dostu' yanıt vermek için Jonathan'ın yanıtını daha da genişlettim.

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

Ve bu işlevi çağırarak:

Bu tarihleri ​​kullanarak

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

dönen mı:

Age: 1 years, 2 months 

Sevimli - sadece birkaç gün yaşlı gerçekten genç olanlar için!

+0

$ doğum günü $ bday olmalı – ow3n