2010-08-01 23 views
6

devo date di nascita sul mio sito in formato 12.01.1980.età attuale di PHP Calcolare persona

$person_date (string) = Day.Month.Year 

Vuoi aggiungere un vecchio della persona. Come "Attualmente 30 anni" (2010 - 1980 = 30 anni).

Ma makin la funzione appena in anni non può dare il risultato perfetto:

Se persona data di nascita è 12.12.1980 e la data corrente è 01.01.2010 la persona non ha 30 anni. È un 29 anni e un mese.

Ci deve essere un calcolo sul targeting sia l'anno, mese e giorno di nascita con confronto tra la data corrente:

0) Analizzare le date.

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) confronto anno, 2010-1980 = scrittura "30" (lascia che sia $total_year variabile)

2) confrontare i mesi, se (data di nascita mese è più grande> rispetto al mese corrente (come 12 nella nascita e la corrente 01)) {do meno di un anno dalla $total_year variabile (30-1 = 29)}. Se è successo meno, finisci i calcoli a questo punto. Altrimenti vai al prossimo (3 step).

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

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

e controllare il giorno (in questa fase):

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;

La mia conoscenza di PHP non è buono, spero che tu possa aiutare.

Grazie.

+0

Contare i giorni tra la data di nascita e ora, moltiplicare per 4, dividere per 1461 (invece di dividere il float per 365.25)? – pascal

+0

darà una risposta giusta? – James

+0

@pascal: come valuteresti i giorni? – Svish

risposta

36

È possibile utilizzare il suo metodo e 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); 

stampe 29 years, 7 month, 20 days

+1

Questo è quello che mi serve, grazie amico! – James

+0

Questo è veramente utile, grazie! – itsricky

6

Un'estensione del @ di VolkerK risposta - che è eccellente! Non mi piace mai vedere l'età di zero, il che accade se usi solo l'anno. Questa funzione mostra la loro età in mesi (se sono un mese o più), e tuttavia in giorni.

+1

Bel lavoro qui @jonathan. È un'estensione del buon senso del lavoro di VolkerK. L'ho modificato di nuovo per dare una lettura più "umana", vedi sotto. Grazie! – itsricky

2

Ho esteso ulteriormente la risposta di @ Jonathan, per dare una risposta più "umana".

Utilizzando queste date:

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

E chiamare questa funzione:

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

sta tornando:

Age: 1 years, 2 months 

Cute - per quelli veramente giovani solo pochi giorni di vita!

+0

$ compleanno dovrebbe essere $ bday – ow3n