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




php wiki (20)

আমি একজন ব্যক্তির বয়স গণনা করার উপায় খুঁজছি, তাদের ডিওবি বিন্যাস ডিডি / মিমি / yyyy বিন্যাস দেওয়া।

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

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

//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 এর একটি DOB এর জন্য "40" প্রদান করে

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

DateTime বস্তু ব্যবহার করে এই যে কোন চেষ্টা করুন

$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


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

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

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


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

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

আপনি করতে পারেন:

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

বা:

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

আপনি যদি dob ব্যবহার করার বয়সকে caculate করতে চান, আপনি এই ফাংশন ব্যবহার করতে পারেন। এটা DateTime বস্তু ব্যবহার করে।

function calcutateAge($dob){

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

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

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

        return $diff->y;

}

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

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

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

তাই জন্মদিনের মধ্যে আপনার টাইমজোনটিতে 18 বা ২1 বছর বা তার নীচে 100 এরও কম বয়সী (মূল টাইমজোনটি কখনই মনে না করে) যদি আপনি চেক করতে চান তবে এটি করতে আমার উপায়


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

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

আমি এই স্ক্রিপ্ট নির্ভরযোগ্য পাওয়া গেছে। এটি 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;
}

আমি বয়স গণনা করার জন্য নিম্নলিখিত পদ্ধতি ব্যবহার করি:

$oDateNow = new DateTime();
$oDateBirth = new DateTime($sDateBirth);

// New interval
$oDateIntervall = $oDateNow->diff($oDateBirth);

// Output
echo $oDateIntervall->y;

এই জরিমানা কাজ করে।

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

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

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

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

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

আমার 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');

ব্লগ দেখুন

php.net/manual/en/function.strtotime.php পদ্ধতি সম্পর্কে একটি কী নোট:

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.

এই ফাংশন বছর বয়সে ফিরে আসবে। ইনপুট মানটি জন্মের স্ট্রিংয়ের তারিখ (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;
}

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


এর জন্য শীর্ষ উত্তরটি ঠিক আছে তবে শুধুমাত্র একজন ব্যক্তির জন্মের বছরটিকে ক্যাল্যুলাইট করে দিন, দিন এবং মাসটি কাজ করার জন্য আমি নিজের কাজের জন্য এটি টিভ করেছি। কিন্তু ভাগ ভাগ মূল্য ছিল।

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

$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;

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

$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;
}

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


বছর, মাস এবং দিন অনুসারে নির্দিষ্ট নির্দিষ্ট ফেরত নিয়ে DOO গণনা করার জন্য এটি আমার ফাংশন

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

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

$age = ageDOB(1984,5,8); /* with my local time is 2014-07-01 */
echo sprintf("age = %d years %d months %d days",$age['y'],$age['m'],$age['d']); /* output -> age = 29 year 1 month 24 day */

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

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

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


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

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

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

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

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




php