PHP menghitung umur

160

Saya sedang mencari cara untuk menghitung usia seseorang, mengingat DOB mereka dalam format dd / mm / yyyy.

Saya menggunakan fungsi berikut yang bekerja dengan baik selama beberapa bulan sampai semacam kesalahan menyebabkan loop sementara tidak pernah berakhir dan menggiling seluruh situs terhenti. Karena ada hampir 100.000 DOB melalui fungsi ini beberapa kali sehari, sulit untuk menentukan apa yang menyebabkan ini.

Adakah yang punya cara lebih andal dalam menghitung usia?

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

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

EDIT: fungsi ini tampaknya berfungsi OK beberapa waktu, tetapi mengembalikan "40" untuk DOB 14/09/1986

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

Jawaban:

192

Ini berfungsi dengan baik.

<?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;
?>
Sudhir Bastakoti
sumber
1
Setuju, kadang-kadang untuk format yang perlu kita gunakan mktime(). sepertinya php salah hitung strtotime()dengan format itu.
GusDeCooL
30
PHP strtotimebenar - benar memahami format tanggal, Anda tidak perlu khawatir: 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
Fungsi ini benar-benar lebih mahal daripada solusi lainnya. Itu berasal dari fungsi date () yang terlalu sering digunakan.
Jarzon
Tanggal prorata yang bagus. Terima kasih
Roque Mejos
172
$tz  = new DateTimeZone('Europe/Brussels');
$age = DateTime::createFromFormat('d/m/Y', '12/02/1973', $tz)
     ->diff(new DateTime('now', $tz))
     ->y;

Pada PHP 5.3.0 Anda dapat menggunakan berguna DateTime::createFromFormatuntuk memastikan bahwa tanggal Anda tidak mendapatkan kesalahan untuk m/d/Yformat dan DateIntervalkelas (via DateTime::diff) untuk mendapatkan jumlah tahun antara sekarang dan tanggal target.

salathe
sumber
1
Terlihat menjanjikan, tetapi sayangnya sebagian besar server hosting di negara saya masih menggunakan PHP 5.2.x :(
GusDeCooL
3
Apakah itu benar-benar membutuhkan zona waktu?
André Chalella
127
 $date = new DateTime($bithdayDate);
 $now = new DateTime();
 $interval = $now->diff($date);
 return $interval->y;
Wernight
sumber
Saya mencoba menggunakan DateTime () sebelumnya tetapi ini membekukan skrip. Dalam log saya, saya melihat PHP Peringatan: date (): Tidak aman untuk bergantung pada pengaturan zona waktu sistem, bahkan ketika saya menambahkan date_default_timezone_set ('Eropa / Brussels');
stef
1
Anda yakin telah menghapus # sebelum baris itu? Anda harus mengaturnya di
PHP.ini
Biasanya aman untuk mengabaikan peringatan itu (terutama dalam kasus itu).
Wernight
96

Saya menggunakan Tanggal / Waktu untuk ini:

$age = date_diff(date_create($bdate), date_create('now'))->y;
Andrey Korchak
sumber
Anda dapat menggunakan sesuatu seperti ini untuk format tanggal gaya Inggris: $ age = date_diff (date_create (str_replace ('/', '.', $ Bdate)), date_create ('now')) -> y; karena stackoverflow.com/questions/4163641/…
Richard
1
Solusi paling sederhana, hanya satu baris. Hanya bekerja pada PHP 5.3+
Rhaymand Tatlonghari
60

Metode sederhana untuk menghitung Usia dari dob:

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

31556926 adalah jumlah detik dalam setahun.

Mike
sumber
16
penggunaan fungsi yang berlebihan ...$_age = floor((time() - strtotime('1986-09-16')) / 31556926);
Mavelo
4
Solusi terbaik ... 1 liner, sederhana dan hindari penggunaan: mktime
Timmy
1
@RobertM. Apakah itu sangat buruk dalam kasus ini? Saya tidak berpikir bahwa fungsi-fungsi ini kompleks atau "berat"
Dewan159
1
@ Dewan159 lihat riwayat edit ... diubah agar sesuai dengan solusi saya;)
Mavelo
4
Bagaimana dengan detik kabisat?
ksimka
17

// Kalkulator Usia

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);
matinict
sumber
5
Solusi modern terbaik 2016.
AlexioVay
14

Saya menemukan ini berhasil dan sederhana.

Kurangi dari 1970 karena strtotime menghitung waktu dari 1970-01-01 ( http://php.net/manual/en/function.strtotime.php )

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

Hasil:

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
Travis Mark Chong
sumber
Hampir benar ... strtotime () menghitung waktu dari 1969-12-31 18:00:00
phoenix
8

Jika Anda ingin menghitung Usia menggunakan dob, Anda juga dapat menggunakan fungsi ini. Ini menggunakan objek 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;

}
hmoyat
sumber
8

Kupikir aku akan melemparkan ini ke sini karena ini sepertinya bentuk paling populer dari pertanyaan ini.

Saya menjalankan perbandingan 100 tahun pada 3 jenis fungsi funcs usia paling populer yang dapat saya temukan untuk PHP dan memposting hasil saya (serta fungsinya) ke blog saya .

Seperti yang Anda lihat di sana , semua 3 fungsi tampil dengan baik dengan hanya sedikit perbedaan pada fungsi ke-2. Saran saya berdasarkan hasil saya adalah menggunakan fungsi ke-3 kecuali jika Anda ingin melakukan sesuatu yang spesifik pada hari ulang tahun seseorang, dalam hal ini fungsi ke-1 menyediakan cara sederhana untuk melakukan hal itu.

Ditemukan masalah kecil dengan tes, dan masalah lain dengan metode 2! Pembaruan segera hadir di blog! Untuk saat ini, saya perhatikan, metode ke-2 masih paling populer yang saya temukan online, namun tetap saja saya menemukan ketidakakuratan paling banyak!

Saran saya setelah ulasan 100 tahun saya:

Jika Anda menginginkan sesuatu yang lebih memanjang sehingga Anda dapat memasukkan acara-acara seperti ulang tahun dan semacamnya:

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

Tetapi jika Anda hanya ingin tahu umur dan tidak lebih, maka:

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

getAge('1980-02-29');

Lihat BLOG


Catatan kunci tentang strtotimemetode ini:

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.
SpYk3HH
sumber
8

Anda dapat menggunakan Carbonperpustakaan , yang merupakan ekstensi API untuk DateTime.

Kamu bisa:

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

atau:

$age = (new \Carbon\Carbon($date))->age;
Broshi
sumber
1
Ini adalah solusi yang lebih bersih tetapi membutuhkan lib eksternal yang mungkin bukan yang terbaik untuk setiap proyek
stef
1
karbon menawarkan properti ajaib age, yang melakukan a diffInYears. Jadi, Anda dapat menulis:(new \Carbon\Carbon($date))->age
k0pernikus
4

Jika Anda tidak membutuhkan ketelitian tinggi, hanya beberapa tahun, Anda dapat mempertimbangkan untuk menggunakan kode di bawah ini ...

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

Anda hanya perlu memasukkan ini ke dalam fungsi dan mengganti tanggal "1971-11-20" dengan variabel.

Harap perhatikan bahwa ketepatan kode di atas tidak tinggi karena tahun kabisat, yaitu setiap 4 tahun setiap harinya adalah 366 bukannya 365. Ekspresi 60 * 60 * 24 * 365 menghitung jumlah detik dalam satu tahun - Anda dapat ganti dengan 31536000.

Hal penting lainnya adalah bahwa karena penggunaan Timestamp UNIX memiliki masalah Tahun 1901 dan Tahun 2038 yang berarti ungkapan di atas tidak akan berfungsi dengan benar untuk tanggal sebelum tahun 1901 dan setelah tahun 2038.

Jika Anda dapat hidup dengan batasan yang disebutkan di atas, kode itu akan bekerja untuk Anda.

Neven Boyanov
sumber
apa yang akan terjadi pada 2038 "setiap sistem" akan macet jika menggunakan waktu ()?
Miguel
3
//replace / with - so strtotime works
$dob = strtotime(str_replace("/","-",$birthdayDate));       
$tdate = time();
return date('Y', $tdate) - date('Y', $dob);
Sergey Eremin
sumber
1
Tidak bekerja Fungsi Anda akan menunjukkan bahwa seseorang yang lahir pada 1 September 1990 adalah usia yang sama dengan seseorang yang lahir pada 1 Oktober 1990 - itu akan menghitung (2010 - 1990) = 20 untuk keduanya.
PaulJWilliams
Berapa presisi usia yang Anda butuhkan? bulan? hari?
Sergey Eremin
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;
  }
CristiC
sumber
Tampaknya ok pada beberapa tanggal tetapi untuk yang lain tidak mengembalikan apa-apa, mungkin jika IF tidak terpenuhi?
stef
3

Saya menemukan skrip ini dapat diandalkan. Dibutuhkan format tanggal sebagai YYYY-mm-dd, tetapi dapat dimodifikasi untuk format lain dengan cukup mudah.

/*
* 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;
}
Phil Lewis
sumber
2
Tolong beberapa detail bagaimana ini akan membantu. Menempelkan suatu fungsi bukanlah cara yang tepat untuk menjawab.
Starx
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);
Dmitriy
sumber
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
younes0
sumber
3

Coba salah satu dari ini menggunakan objek 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/>";

Referensi http://www.calculator.net/age-calculator.html

Shailesh Sonare
sumber
3

Tulis skrip PHP untuk menghitung usia seseorang saat ini.

Tanggal lahir sampel: 11.4.1987

Solusi sampel:

Kode PHP:

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

Output sampel:

Umur Anda: 30 tahun, 3 bulan, 0 hari

Hosam Elzagh
sumber
2

ini adalah fungsi saya untuk menghitung DOB dengan pengembalian spesifik usia berdasarkan tahun, bulan, dan hari

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

ini cara menggunakannya

$ age = ageDOB (1984,5,8); / * dengan waktu lokal saya adalah 2014-07-01 * *
echo sprintf ("usia =% d tahun% d bulan% d hari", $ age ['y'], $ age ['m'], $ age ['d']); / * output -> usia = 29 tahun 1 bulan 24 hari * /
MdPutra
sumber
2

Fungsi ini akan mengembalikan usia dalam beberapa tahun. Nilai input adalah tanggal diformat (YYYY-MM-DD) hari dari string kelahiran misalnya: 2000-01-01

Ia bekerja dengan ketepatan hari

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

Ceria, nira

nira
sumber
1

Jika Anda tampaknya tidak dapat menggunakan beberapa fungsi yang lebih baru, inilah sesuatu yang saya coba. Mungkin lebih dari yang Anda butuhkan, dan saya yakin ada cara yang lebih baik, tetapi mudah dibaca, sehingga harus melakukan pekerjaan:

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

Contoh Penggunaan:

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

Semoga ini membantu.

maiorano84
sumber
1

Karena tahun kabisat, tidak bijaksana hanya mengurangi satu tanggal dari yang lain dan menambahkannya ke beberapa tahun. Untuk menghitung usia seperti manusia, Anda akan membutuhkan sesuatu seperti ini:

$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--;
}
mileusna
sumber
1

Berikut ini berfungsi baik untuk saya dan tampaknya jauh lebih sederhana daripada contoh-contoh yang telah diberikan.

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

Saya telah menguji dan secara aktif menggunakan kode ini, mungkin terlihat sedikit rumit tetapi sangat mudah digunakan dan diedit dan cukup akurat.

JustSomeGuy
sumber
1

Mengikuti logika pertama, Anda harus menggunakan = dalam perbandingan.

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

?>
maikelsalazar
sumber
Diturunkan. Sementara itu bekerja itu tidak efisien untuk menggunakan loop untuk melakukan matematika dasar.
Wranorn
1

Ini adalah masalah ketika Anda menggunakan strtotime dengan DD / MM / YYYY. Anda tidak dapat menggunakan format itu. Alih-alih, Anda dapat menggunakan MM / DD / YYYY (atau banyak lainnya seperti YYYYMMDD atau YYYY-MM-DD) dan itu harus berfungsi dengan baik.

Bruno Foggia
sumber
1

Bagaimana dengan meluncurkan kueri ini dan membuat MySQL menghitungnya untuk Anda:

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

Hasil:

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

Pengguna memiliki 27 tahun dan 6 bulan (ini dihitung satu bulan penuh)

Artur Kędzior
sumber
Ini sebenarnya adalah solusi yang baik untuk orang-orang di PHP versi pra-5.3 yang tidak memiliki akses ke date_diff dan sejenisnya.
strangerstudios
1

Saya melakukannya seperti ini.

$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;
}
Smorvy
sumber
1

Jawaban teratas untuk ini adalah OK tetapi hanya kalualit tahun seseorang dilahirkan, saya men-tweak itu untuk tujuan saya sendiri untuk berolahraga hari dan bulan. Tetapi saya pikir itu layak untuk dibagikan.

Ini berfungsi dengan mengambil stempel waktu pengguna DOB, tetapi jangan ragu untuk mengubahnya

$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;
Paul Ledger
sumber
1

Jika Anda hanya ingin mendapatkan sepenuhnya usia, ada cara supersimple untuk melakukan itu. perlakukan tanggal yang diformat sebagai 'YYYYMMDD' sebagai angka dan kurangi. Setelah itu membatalkan bagian MMDD dengan membagi hasilnya dengan 10.000 dan lantai itu. Sederhana dan tidak pernah gagal, bahkan memperhitungkan leapyears dan waktu server Anda saat ini;)

Sejak ulang tahun atau sebagian besar disediakan oleh tanggal lengkap di lokasi kelahiran dan mereka relevan dengan WAKTU LOKAL SAAT INI (di mana pemeriksaan usia sebenarnya dilakukan).

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

jadi jika Anda ingin memeriksa apakah seseorang berusia 18 atau 21 atau di bawah 100 di zona waktu Anda (jangan lupa zona waktu asal) pada hari ulang tahun, ini adalah cara saya untuk melakukan ini

simplemath
sumber
0

Coba ini :

<?php
  $birth_date = strtotime("1988-03-22");
  $now = time();
  $age = $now-$birth_date;
  $a = $age/60/60/24/365.25;
  echo floor($a);
?>
Michael
sumber