পিএইচপি বয়স গণনা


160

আমি ডিডি / মিমি / ইয়াই ফর্ম্যাটে কোনও ব্যক্তির ডিওবি প্রদত্ত কোনও ব্যক্তির বয়স নির্ণয়ের জন্য উপায় খুঁজছি।

আমি নিম্নলিখিত ফাংশনটি ব্যবহার করছিলাম যা বেশ কয়েক মাস ধরে দুর্দান্ত কাজ করেছিল যতক্ষণ না কোনও ধরণের ত্রুটি সৃষ্টি হওয়ার সময় লুপটি কখনই শেষ হয় না এবং পুরো সাইটটি বন্ধ করে দেয়। যেহেতু প্রতিদিন প্রায় 100,000 ডিওবি এই ফাংশনটি নিয়ে দিনে কয়েকবার যাচ্ছেন, কী কারণে এটি ঘটছে তা পিন করা শক্ত।

কারও কি বয়স নির্ণয়ের আরও নির্ভরযোগ্য উপায় রয়েছে?

//replace / with - so strtotime works
$dob = strtotime(str_replace("/","-",$birthdayDate));       
$tdate = time();

$age = 0;
while( $tdate > $dob = strtotime('+1 year', $dob))
{
    ++$age;
}
return $age;

সম্পাদনা: এই ফাংশনটি কিছুটা সময় ঠিক আছে বলে মনে হচ্ছে তবে 14/09/1986 এর একটি ডিওবি-র জন্য "40" প্রদান করবে

return floor((time() - strtotime($birthdayDate))/31556926);

উত্তর:


192

এটি কাজ করে।

<?php
  //date in mm/dd/yyyy format; or it can be in other formats as well
  $birthDate = "12/17/1983";
  //explode the date to get month, day and year
  $birthDate = explode("/", $birthDate);
  //get age from date or birthdate
  $age = (date("md", date("U", mktime(0, 0, 0, $birthDate[0], $birthDate[1], $birthDate[2]))) > date("md")
    ? ((date("Y") - $birthDate[2]) - 1)
    : (date("Y") - $birthDate[2]));
  echo "Age is:" . $age;
?>

1
সম্মত হন, সেই বিন্যাসের জন্য আমাদের কিছু সময় প্রয়োজন mktime()। মনে হচ্ছে পিএইচপি strtotime()এই ফর্ম্যাটটি দিয়ে ভুলভাবে গণনা করেছে ।
GusDeCooL

30
পিএইচপি এর strtotime: পুরোপুরি তারিখ ফরম্যাটের বুঝতে পারে, আপনি চিন্তা করতে হবে না Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed. php.net/manual/en/function.strtotime.php
s3v3n

এই সমাধানটি অন্যান্য সমাধানগুলির চেয়ে সত্যই বেশি ব্যয়বহুল। এটি তারিখের অতিরিক্ত ব্যবহার () ফাংশন থেকে আসছে।
জারজন

ভাল প্রোরেটেড তারিখ। ধন্যবাদ
রোক মেজোস

172
$tz  = new DateTimeZone('Europe/Brussels');
$age = DateTime::createFromFormat('d/m/Y', '12/02/1973', $tz)
     ->diff(new DateTime('now', $tz))
     ->y;

পিএইচপি ৫.৩.০ ​​হিসাবে DateTime::createFromFormatআপনি নিশ্চিত হয়ে নিতে পারেন যে আপনার তারিখটি m/d/Yফর্ম্যাট এবং DateIntervalক্লাসের মাধ্যমে ( DateTime::diffযাতে) এখন এবং লক্ষ্য তারিখের মধ্যে বছরের সংখ্যা পেতে ভুল হয় না ।


1
প্রতিশ্রুতিবদ্ধ মনে হচ্ছে, তবে দুর্ভাগ্যক্রমে আমার দেশে হোস্টিংয়ের বেশিরভাগই পিএইচপি 5.2.x ব্যবহার করে :(
গুডডেকল

3
এটির কি আসলেই টাইমজোন দরকার?
আন্দ্রে চেলেলা

127
 $date = new DateTime($bithdayDate);
 $now = new DateTime();
 $interval = $now->diff($date);
 return $interval->y;

আমি ডেটটাইম () এর আগে ব্যবহার করার চেষ্টা করেছি তবে এটি স্ক্রিপ্টটি স্থির করে দেয়। আমার লগগুলিতে আমি পিএইচপি সতর্কতা দেখি: তারিখ (): আমি তারিখ_পৃষ্ঠা_কালীন সময়_সেট ('ইউরোপ / ব্রাসেলস') যুক্ত করার পরেও সিস্টেমের টাইমজোন সেটিংসের উপর নির্ভর করা নিরাপদ নয়;
স্টেপ

1
আপনি কি নিশ্চিত যে আপনি এই লাইনের আগে # টি সরিয়েছেন? আপনার PHP.ini
Wernight

সচেতনতাকে অগ্রাহ্য করা সাধারণত নিরাপদ (বিশেষত সেই ক্ষেত্রে)।
ওয়ার্নাইট

96

আমি এর জন্য তারিখ / সময় ব্যবহার করি:

$age = date_diff(date_create($bdate), date_create('now'))->y;

ব্রিটিশ শৈলীর তারিখের ফর্ম্যাটগুলির জন্য আপনি এর মতো কিছু ব্যবহার করতে পারেন: $ বয়স = তারিখ_ডিফ (তারিখ_ক্রেট (str_replace ('/', '।', 'বিডিট))), তারিখ_ক্রেট (' এখন ')) -> y; স্ট্যাকওভারফ্লো
রিচার্ড

1
সহজ সমাধান, কেবল একটি লাইন। কেবল পিএইচপি
5.3+ এ

60

দোব থেকে বয়স গণনার সহজ পদ্ধতি:

$_age = floor((time() - strtotime('1986-09-16')) / 31556926);

31556926 এক বছরে সেকেন্ডের সংখ্যা।


16
ফাংশনগুলির অতিরিক্ত ব্যবহার ...$_age = floor((time() - strtotime('1986-09-16')) / 31556926);
মাভেলো

4
সবচেয়ে ভালো সমাধান ... 1 মাছ ধরার নৌকা, সহজ এবং এড়ানোর ব্যবহার: mktime
Timmy আপনি

1
@RobertM। এই ক্ষেত্রে কি এত খারাপ? আমি মনে করি না যে এই ফাংশনগুলি সেই জটিল বা "ভারী"
দেওয়ান 159

1
@ দেওয়ান 159 সম্পাদনার ইতিহাস দেখুন ... আমার সমাধানের সাথে মেলে পরিবর্তন করা হয়েছে;)
মাভেলো

4
লিপ সেকেন্ডের কী হবে?
ksimka

17

// বয়স ক্যালকুলেটর

function getAge($dob,$condate){ 
    $birthdate = new DateTime(date("Y-m-d",  strtotime(implode('-', array_reverse(explode('/', $dob))))));
    $today= new DateTime(date("Y-m-d",  strtotime(implode('-', array_reverse(explode('/', $condate))))));           
    $age = $birthdate->diff($today)->y;

    return $age;
}

$dob='06/06/1996'; //date of Birth
$condate='07/02/16'; //Certain fix Date of Age 
echo getAge($dob,$condate);

5
সেরা আধুনিক সমাধান 2016.
অ্যালেক্সিওভায়

14

আমি এই কাজ খুঁজে পেতে এবং সহজ।

1970 থেকে বিয়োগ করুন কারণ স্ট্রোটোটাইম 1970-01-01 থেকে সময় গণনা করে ( http://php.net/manual/en/function.strtotime.php )

function getAge($date) {
    return intval(date('Y', time() - strtotime($date))) - 1970;
}

ফলাফল:

Current Time: 2015-10-22 10:04:23

getAge('2005-10-22') // => 10
getAge('1997-10-22 10:06:52') // one 1s before  => 17
getAge('1997-10-22 10:06:50') // one 1s after => 18
getAge('1985-02-04') // => 30
getAge('1920-02-29') // => 95

প্রায় সত্য ... স্ট্রোটাইম () 1969-12-31 18:00:00 থেকে সময় গণনা করে
ফিনিক্স

8

আপনি যদি দোব ব্যবহারের বয়সটি সারণী করতে চান তবে আপনি এই ফাংশনটিও ব্যবহার করতে পারেন। এটি ডেটটাইম অবজেক্টটি ব্যবহার করে।

function calcutateAge($dob){

        $dob = date("Y-m-d",strtotime($dob));

        $dobObject = new DateTime($dob);
        $nowObject = new DateTime();

        $diff = $dobObject->diff($nowObject);

        return $diff->y;

}

8

এটি এই প্রশ্নের সবচেয়ে জনপ্রিয় ফর্ম বলে মনে হচ্ছে যেহেতু আমি এটিকে এখানে ফেলে দেব।

আমি পিএইচপি জন্য সর্বাধিক জনপ্রিয় 3 বছর বয়সী ফানসিগুলির সাথে 100 বছরের তুলনা চালিয়েছি এবং আমার ফলাফলগুলি (পাশাপাশি ফাংশনগুলি) আমার ব্লগে পোস্ট করেছি

আপনি সেখানে দেখতে পাচ্ছেন , সমস্ত 3 ফান্যাকগুলি 2 য় ফাংশনে সামান্য পার্থক্য সহ ভালভাবে প্রিফর্ম করে। আমার ফলাফলের উপর ভিত্তি করে আমার পরামর্শটি আপনি যদি কোনও ব্যক্তির জন্মদিনে সুনির্দিষ্ট কিছু করতে না চান তবে তৃতীয় ফাংশনটি ব্যবহার করা উচিত, সেক্ষেত্রে 1 ম ফাংশনটি ঠিক এটি করার সহজ উপায় সরবরাহ করে।

পরীক্ষার সাথে ছোট সমস্যা, এবং ২ য় পদ্ধতিতে আর একটি সমস্যা পাওয়া গেছে! আপডেট শীঘ্রই ব্লগে আসছে! আপাতত, আমি খেয়াল করব, ২ য় পদ্ধতি এখনও অনলাইনে সর্বাধিক জনপ্রিয়, এবং এখনও যেটির মধ্যে আমি সবচেয়ে বেশি ত্রুটিগুলি খুঁজে পাচ্ছি!

আমার 100 বছরের পর্যালোচনার পরে আমার পরামর্শগুলি:

আপনি যদি আরও দীর্ঘায়িত কিছু চান যাতে আপনি জন্মদিনের মতো অনুষ্ঠানগুলি এবং এর মধ্যে অন্তর্ভুক্ত করতে পারেন:

function getAge($date) { // Y-m-d format
    $now = explode("-", date('Y-m-d'));
    $dob = explode("-", $date);
    $dif = $now[0] - $dob[0];
    if ($dob[1] > $now[1]) { // birthday month has not hit this year
        $dif -= 1;
    }
    elseif ($dob[1] == $now[1]) { // birthday month is this month, check day
        if ($dob[2] > $now[2]) {
            $dif -= 1;
        }
        elseif ($dob[2] == $now[2]) { // Happy Birthday!
            $dif = $dif." Happy Birthday!";
        };
    };
    return $dif;
}

getAge('1980-02-29');

তবে আপনি যদি কেবল বয়স এবং আরও কিছু জানতে চান না, তবে:

function getAge($date) { // Y-m-d format
    return intval(substr(date('Ymd') - date('Ymd', strtotime($date)), 0, -4));
}

getAge('1980-02-29');

ব্লগ দেখুন


strtotimeপদ্ধতি সম্পর্কে একটি মূল নোট :

Note:

Dates in the m/d/y or d-m-y formats are disambiguated by looking at the 
separator between the various components: if the separator is a slash (/), 
then the American m/d/y is assumed; whereas if the separator is a dash (-) 
or a dot (.), then the European d-m-y format is assumed. If, however, the 
year is given in a two digit format and the separator is a dash (-, the date 
string is parsed as y-m-d.

To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD) dates or 
DateTime::createFromFormat() when possible.

8

আপনি Carbonলাইব্রেরিটি ব্যবহার করতে পারেন যা ডেটটাইমের জন্য একটি এপিআই এক্সটেনশন।

আপনি পারেন:

function calculate_age($date) {
    $date = new \Carbon\Carbon($date);
    return (int) $date->diffInYears();
}

বা:

$age = (new \Carbon\Carbon($date))->age;

1
এটি একটি ক্লিনার সমাধান তবে এটিতে একটি বাহ্যিক লিব প্রয়োজন যা প্রতিটি প্রকল্পের জন্য সেরা নাও হতে পারে
stef

1
কার্বন যাদু সম্পত্তি উপলব্ধ করা হয় age, যা একটি করছে diffInYears। সুতরাং আপনি লিখতে পারেন:(new \Carbon\Carbon($date))->age
k0pernikus

4

আপনার যদি দুর্দান্ত নির্ভুলতার প্রয়োজন না হয়, কেবল বছরের সংখ্যা, আপনি নীচের কোডটি ব্যবহার করে বিবেচনা করতে পারেন ...

 print floor((time() - strtotime("1971-11-20")) / (60*60*24*365));

আপনার কেবল এটি একটি ফাংশনে রাখতে হবে এবং তারিখটি "1971-11-20" একটি ভেরিয়েবলের সাথে প্রতিস্থাপন করতে হবে।

দয়া করে নোট করুন যে লিপ বর্ষের কারণে উপরের কোডটির যথাযথতা বেশি নয়, অর্থাত্ প্রতি 4 বছর পরের দিনগুলি 365 এর পরিবর্তে 366 হয় 60 এটি 31536000 দিয়ে প্রতিস্থাপন করুন।

আর একটি গুরুত্বপূর্ণ বিষয় হ'ল ইউনিক্স টাইমস্ট্যাম্প ব্যবহারের কারণে এটি ১৯০১ সাল এবং বছর ২০৮৮ উভয়ই সমস্যা রয়েছে যার অর্থ উপরের অভিব্যক্তিটি ১৯০১ সালের আগে এবং ২০৩৮ সালের পরে তারিখগুলির জন্য সঠিকভাবে কাজ করবে না।

আপনি যদি উপরে উল্লিখিত সীমাবদ্ধতার সাথে বাঁচতে পারেন তবে কোডটি আপনার পক্ষে কাজ করা উচিত।


2038-এ কী হবে যখন সময় ব্যবহার করে "প্রতিটি সিস্টেম" ক্র্যাশ হবে?
মিগুয়েল

3
//replace / with - so strtotime works
$dob = strtotime(str_replace("/","-",$birthdayDate));       
$tdate = time();
return date('Y', $tdate) - date('Y', $dob);

1
কাজ না। আপনার ফাংশনটি ইঙ্গিত দিবে যে 1 লা সেপ্টেম্বর 1990-এ জন্মগ্রহণ করা কেউই 1 ই অক্টোবর 1990-এ জন্মগ্রহণকারী ব্যক্তির সমান বয়স - এটি উভয়ের জন্য গণনা করা হবে (2010 - 1990) = 20
পলজেউইলিয়ামস

তোমার বয়সের কোন নির্ভুলতা দরকার? মাস? দিন?
সের্গেই ইরেমিন

3
  function dob ($birthday){
    list($day,$month,$year) = explode("/",$birthday);
    $year_diff  = date("Y") - $year;
    $month_diff = date("m") - $month;
    $day_diff   = date("d") - $day;
    if ($day_diff < 0 || $month_diff < 0)
      $year_diff--;
    return $year_diff;
  }

কিছু তারিখ ঠিক আছে বলে মনে হয় তবে অন্যদের জন্য এটি কিছুই ফেরায় না, সম্ভবতঃ যদি আইএফ পূরণ না হয়?
স্টেপ

3

আমি এই স্ক্রিপ্টটি নির্ভরযোগ্য পেয়েছি। এটি YYYY-mm-dd হিসাবে তারিখের ফর্ম্যাট নেয়, তবে এটি অন্যান্য বিন্যাসগুলির জন্য খুব সহজেই সংশোধন করা যেতে পারে।

/*
* Get age from dob
* @param        dob      string       The dob to validate in mysql format (yyyy-mm-dd)
* @return            integer      The age in years as of the current date
*/
function getAge($dob) {
    //calculate years of age (input string: YYYY-MM-DD)
    list($year, $month, $day) = explode("-", $dob);

    $year_diff  = date("Y") - $year;
    $month_diff = date("m") - $month;
    $day_diff   = date("d") - $day;

    if ($day_diff < 0 || $month_diff < 0)
        $year_diff--;

    return $year_diff;
}

2
এটি কীভাবে সহায়ক হবে সে সম্পর্কে কিছু বিশদ লিখুন। কেবল কোনও ফাংশন পেস্ট করা উত্তর দেওয়ার সঠিক উপায় নয়।
স্টারেক্স

3
$birthday_timestamp = strtotime('1988-12-10');  

// Calculates age correctly
// Just need birthday in timestamp
$age = date('md', $birthday_timestamp) > date('md') ? date('Y') - date('Y', $birthday_timestamp) - 1 : date('Y') - date('Y', $birthday_timestamp);

3

i18n:

function getAge($birthdate, $pattern = 'eu')
{
    $patterns = array(
        'eu'    => 'd/m/Y',
        'mysql' => 'Y-m-d',
        'us'    => 'm/d/Y',
    );

    $now      = new DateTime();
    $in       = DateTime::createFromFormat($patterns[$pattern], $birthdate);
    $interval = $now->diff($in);
    return $interval->y;
}

// Usage
echo getAge('05/29/1984', 'us');
// return 28

3

ডেটটাইম অবজেক্ট ব্যবহার করে এর যে কোনও একটি ব্যবহার করে দেখুন

$hours_in_day   = 24;
$minutes_in_hour= 60;
$seconds_in_mins= 60;

$birth_date     = new DateTime("1988-07-31T00:00:00");
$current_date   = new DateTime();

$diff           = $birth_date->diff($current_date);

echo $years     = $diff->y . " years " . $diff->m . " months " . $diff->d . " day(s)"; echo "<br/>";
echo $months    = ($diff->y * 12) + $diff->m . " months " . $diff->d . " day(s)"; echo "<br/>";
echo $weeks     = floor($diff->days/7) . " weeks " . $diff->d%7 . " day(s)"; echo "<br/>";
echo $days      = $diff->days . " days"; echo "<br/>";
echo $hours     = $diff->h + ($diff->days * $hours_in_day) . " hours"; echo "<br/>";
echo $mins      = $diff->h + ($diff->days * $hours_in_day * $minutes_in_hour) . " minutest"; echo "<br/>";
echo $seconds   = $diff->h + ($diff->days * $hours_in_day * $minutes_in_hour * $seconds_in_mins) . " seconds"; echo "<br/>";

রেফারেন্স http://www.calculator.net/age-calculator.html


3

কোনও ব্যক্তির বর্তমান বয়স গণনা করার জন্য একটি পিএইচপি স্ক্রিপ্ট লিখুন।

জন্মের নমুনা তারিখ: 11.4.1987

নমুনা সমাধান:

পিএইচপি কোড:

<?php
$bday = new DateTime('11.4.1987'); // Your date of birth
$today = new Datetime(date('m.d.y'));
$diff = $today->diff($bday);
printf(' Your age : %d years, %d month, %d days', $diff->y, $diff->m, $diff->d);
printf("\n");
?>

নমুনা আউটপুট:

আপনার বয়স: 30 বছর, 3 মাস, 0 দিন


2

বছর, মাস এবং দিন দ্বারা বয়সের নির্দিষ্ট প্রত্যাবর্তনের সাথে ডিওবি গণনা করা আমার এই কাজ

function ageDOB($y=2014,$m=12,$d=31){ /* $y = year, $m = month, $d = day */
date_default_timezone_set("Asia/Jakarta"); /* can change with others time zone */

$ageY = date("Y")-intval($y);
$ageM = date("n")-intval($m);
$ageD = date("j")-intval($d);

if ($ageD < 0){
    $ageD = $ageD += date("t");
    $ageM--;
    }
if ($ageM < 0){
    $ageM+=12;
    $ageY--;
    }
if ($ageY < 0){ $ageD = $ageM = $ageY = -1; }
return array( 'y'=>$ageY, 'm'=>$ageM, 'd'=>$ageD );
}

এটি কিভাবে এটি ব্যবহার করতে হয়

$ বয়স = বয়সডোবি (1984,5,8); / * আমার স্থানীয় সময় সহ 2014-07-01 * /
প্রতিধ্বনি স্প্রিন্ট্ফ ("বয়স =% d বছর% d মাস% d দিন", $ বয়স ['y'], $ বয়স ['এম'], $ বয়স ['ডি']); / * আউটপুট -> বয়স = 29 বছর 1 মাস 24 দিন * /

2

এই ফাংশন বছরের পর বছর ফিরে আসবে। ইনপুট মান হল জন্ম তারিখের (YYYY-MM-DD) জন্ম তারিখ যেমন: 2000-01-01

এটি দিন - নির্ভুলতার সাথে কাজ করে

function getAge($dob) {
    //calculate years of age (input string: YYYY-MM-DD)
    list($year, $month, $day) = explode("-", $dob);

    $year_diff  = date("Y") - $year;
    $month_diff = date("m") - $month;
    $day_diff   = date("d") - $day;

    // if we are any month before the birthdate: year - 1 
    // OR if we are in the month of birth but on a day 
    // before the actual birth day: year - 1
    if ( ($month_diff < 0 ) || ($month_diff === 0 && $day_diff < 0))
        $year_diff--;   

    return $year_diff;
}

চিয়ার্স, নীরা


1

আপনি যদি নতুন কিছু ফাংশন ব্যবহার করতে পারেন না বলে মনে করেন তবে আমি এখানে কিছুটা চাপ দিয়েছি। সম্ভবত আপনার প্রয়োজনের চেয়ে বেশি, এবং আমি নিশ্চিত যে আরও ভাল উপায় আছে তবে এটি পড়া সহজ, সুতরাং এটি কাজটি করা উচিত:

function get_age($date, $units='years')
{
    $modifier = date('n') - date('n', strtotime($date)) ? 1 : (date('j') - date('j', strtotime($date)) ? 1 : 0);
    $seconds = (time()-strtotime($date));
    $years = (date('Y')-date('Y', strtotime($date))-$modifier);
    switch($units)
    {
        case 'seconds':
            return $seconds;
        case 'minutes':
            return round($seconds/60);
        case 'hours':
            return round($seconds/60/60);
        case 'days':
            return round($seconds/60/60/24);
        case 'months':
            return ($years*12+date('n'));
        case 'decades':
            return ($years/10);
        case 'centuries':
            return ($years/100);
        case 'years':
        default:
            return $years;
    }
}

উদাহরণ ব্যবহার:

echo 'I am '.get_age('September 19th, 1984', 'days').' days old';

আশাকরি এটা সাহায্য করবে.


1

লিপ ইয়ারের কারণে, কেবলমাত্র একটি তারিখকে অন্য থেকে বিয়োগ করে বছরের সংখ্যাতে রেখে দেওয়া বুদ্ধিমানের কাজ নয়। মানুষের মতো বয়স গণনা করতে আপনার এর মতো কিছু প্রয়োজন হবে:

$birthday_date = '1977-04-01';
$age = date('Y') - substr($birthday_date, 0, 4);
if (strtotime(date('Y-m-d')) - strtotime(date('Y') . substr($birthday_date, 4, 6)) < 0)
{
    $age--;
}

1

নিম্নলিখিতটি আমার পক্ষে দুর্দান্ত কাজ করে এবং ইতিমধ্যে যে উদাহরণ দেওয়া হয়েছে তার চেয়ে অনেক সহজ বলে মনে হচ্ছে।

$dob_date = "01";
$dob_month = "01";
$dob_year = "1970";
$year = gmdate("Y");
$month = gmdate("m");
$day = gmdate("d");
$age = $year-$dob_year; // $age calculates the user's age determined by only the year
if($month < $dob_month) { // this checks if the current month is before the user's month of birth
  $age = $age-1;
} else if($month == $dob_month && $day >= $dob_date) { // this checks if the current month is the same as the user's month of birth and then checks if it is the user's birthday or if it is after it
  $age = $age;
} else if($month == $dob_month && $day < $dob_date) { //this checks if the current month is the user's month of birth and checks if it before the user's birthday
  $age = $age-1;
} else {
  $age = $age;
}

আমি এই কোডটি পরীক্ষা করেছি এবং সক্রিয়ভাবে ব্যবহার করেছি, এটি কিছুটা জটিল মনে হতে পারে তবে এটি ব্যবহার এবং সম্পাদনা করা খুব সহজ এবং এটি বেশ নির্ভুল।


1

প্রথম যুক্তি অনুসরণ করে, আপনাকে তুলনাতে = ব্যবহার করতে হবে।

<?php 
    function age($birthdate) {
        $birthdate = strtotime($birthdate);
        $now = time();
        $age = 0;
        while ($now >= ($birthdate = strtotime("+1 YEAR", $birthdate))) {
            $age++;
        }
        return $age;
    }

    // Usage:

    echo age(implode("-",array_reverse(explode("/",'14/09/1986')))); // format yyyy-mm-dd is safe!
    echo age("-10 YEARS") // without = in the comparison, will returns 9.

?>

Downvoted। এটি যখন কাজ করে তখন বেসিক গণিত করতে লুপ ব্যবহার করা অদক্ষ।
Wranorn

1

আপনি যখন ডিডি / এমএম / ওয়াইওয়াইওয়াইয়ের সাথে স্ট্রোটটাইম ব্যবহার করেন এটি একটি সমস্যা। আপনি সেই ফর্ম্যাটটি ব্যবহার করতে পারবেন না। এর পরিবর্তে আপনি এমএম / ডিডি / ওয়াইওয়াই ব্যবহার করতে পারেন (বা অনেকে YYYYMMDD বা YYYY-MM-DD এর মতো) এবং এটি সঠিকভাবে কাজ করা উচিত।


1

এই কোয়েরিটি আরম্ভ করার এবং মাইএসকিউএল এটি আপনার জন্য গণনা করার বিষয়ে:

SELECT 
username
,date_of_birth
,(PERIOD_DIFF( DATE_FORMAT(CURDATE(), '%Y%m') , DATE_FORMAT(date_of_birth, '%Y%m') )) DIV 12 AS years
,(PERIOD_DIFF( DATE_FORMAT(CURDATE(), '%Y%m') , DATE_FORMAT(date_of_birth, '%Y%m') )) MOD 12 AS months
FROM users

ফলাফল:

r2d2, 1986-12-23 00:00:00, 27 , 6 

ব্যবহারকারীর 27 বছর 6 মাস রয়েছে (এটি পুরো মাস গণনা করে)


এটি পিএইচপি-র প্রাক-5.3 সংস্করণে লোকেদের জন্য একটি ভাল সমাধান যা তারিখ_ডিফ এবং এর মতো অ্যাক্সেস পায় না।
অজানা

1

আমি এটি এরকম করেছিলাম।

$geboortedatum = 1980-01-30 00:00:00;
echo leeftijd($geboortedatum) 

function leeftijd($geboortedatum) {
    $leeftijd = date('Y')-date('Y', strtotime($geboortedatum));
    if (date('m')<date('m', strtotime($geboortedatum)))
        $leeftijd = $leeftijd-1;
    elseif (date('m')==date('m', strtotime($geboortedatum)))
       if (date('d')<date('d', strtotime($geboortedatum)))
           $leeftijd = $leeftijd-1;
    return $leeftijd;
}

1

এর শীর্ষস্থানীয় উত্তরটি ঠিক আছে তবে একজন ব্যক্তি যে বছর জন্মগ্রহণ করেছিলেন কেবল তা কল্পনা করে, আমি এটি নিজের উদ্দেশ্যে এবং দিন এবং মাসের জন্য কাজ করার জন্য টুইট করি aked তবে ভাবেন এটি ভাগ করে নেওয়া উচিত।

এটি ব্যবহারকারীদের একটি টাইমস্ট্যাম্প নিয়ে কাজ করে ডিওবি, তবে এটি পরিবর্তন করতে নির্দ্বিধায়

$birthDate = date('d-m-Y',$usersDOBtimestamp);
$currentDate = date('d-m-Y', time());
//explode the date to get month, day and year
$birthDate = explode("-", $birthDate);
$currentDate = explode("-", $currentDate);
$birthDate[0] = ltrim($birthDate[0],'0');
$currentDate[0] = ltrim($currentDate[0],'0');
//that gets a rough age
$age = $currentDate[2] - $birthDate[2];
//check if month has passed
if($birthDate[1] > $currentDate[1]){
      //user birthday has not passed
      $age = $age - 1;
} else if($birthDate[1] == $currentDate[1]){ 
      //check if birthday is in current month
      if($birthDate[0] > $currentDate[0]){
            $age - 1;
      }


}
   echo $age;

1

আপনি যদি বয়স হিসাবে কেবল পূর্ণতা পেতে চান তবে এটি করার একটি দুর্দান্ত উপায় রয়েছে is 'YYYYMMDD' হিসাবে ফর্ম্যাট করা তারিখগুলিকে সংখ্যা হিসাবে গণ্য করুন এবং সেগুলি বাদ দিন ract এর পরে ফলাফলটি 10000 দিয়ে ভাগ করে এমএমডিডি অংশটি বাতিল করুন এবং এটি নিচে নামিয়ে দিন। সরল এবং কখনই ব্যর্থ হয় না, এমনকি লিপিয়ার এবং আপনার বর্তমান সার্ভারের সময় অ্যাকাউন্টেও নেয়;)

যেহেতু বার্থে বা বেশিরভাগই জন্মের স্থানে সম্পূর্ণ তারিখ দ্বারা সরবরাহ করা হয় এবং এগুলি বর্তমান স্থানীয় সময় (যেখানে বয়স চেক আসলে সম্পন্ন হয়) এর সাথে প্রাসঙ্গিক।

$now = date['Ymd'];
$birthday = '19780917'; #september 17th, 1978
$age = floor(($now-$birtday)/10000);

সুতরাং আপনি যদি জন্মদিনে আপনার টাইমজোনটিতে (আদি সময় অঞ্চলটি কিছু মনে করেন না) 18 বা 21 বা 100 এর নীচে আছেন কিনা তা যদি জানতে চান তবে এটি করার আমার উপায়


0

এটা চেষ্টা কর :

<?php
  $birth_date = strtotime("1988-03-22");
  $now = time();
  $age = $now-$birth_date;
  $a = $age/60/60/24/365.25;
  echo floor($a);
?>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.