2010-08-01 15 views
6

मेरे पास 12.01.1980 प्रारूप में मेरी साइट पर जन्म तिथि है।PHP व्यक्ति की वर्तमान आयु की गणना

$person_date (string) = Day.Month.Year 

व्यक्ति की पुरानीता जोड़ना चाहते हैं। "की तरह वर्तमान में 30 साल" (2010 - 1 9 80 = 30 साल)।

यदि व्यक्ति जन्म तिथि 12.12.1980 है और आज की तारीख 01.01.2010 है व्यक्ति 30 वर्ष नहीं है:

लेकिन makin समारोह बस पर साल सही परिणाम नहीं दे सकता। यह 2 9 साल और एक महीने है।)

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 = 2 9)} से एक वर्ष घटाएं। यदि कम किया गया है, तो इस बिंदु पर गणना खत्म करें। अन्यथा अगला (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

यहां अच्छा काम @jonathan। वोल्कर के काम का यह वास्तव में सामान्य ज्ञान विस्तार है। मैंने इसे और अधिक 'मानव' रीडआउट देने के लिए फिर से संशोधित किया, नीचे देखें। धन्यवाद! – itsricky

2

मैंने और अधिक 'मानव-अनुकूल' प्रतिक्रिया देने के लिए @ जोनाथन के उत्तर को आगे बढ़ाया है।

इन तारीखों का उपयोग करना:

$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

संबंधित मुद्दे