3

您遇到的从用户出生日期算出年龄的最精确功能是什么。我有以下代码,想知道如何改进它,因为它不支持所有日期格式并且不确定它是否是最准确的函数(DateTime 合规性会很好)。

function getAge($birthday) {
    return floor((strtotime(date('d-m-Y')) - strtotime($date))/(60*60*24*365.2421896));
}
4

10 回答 10

13
$birthday = new DateTime($birthday);
$interval = $birthday->diff(new DateTime);
echo $interval->y;

应该管用

于 2012-04-17T07:18:23.147 回答
9

检查这个

<?php
$c= date('Y');
$y= date('Y',strtotime('1988-12-29'));
echo $c-$y;
?>
于 2013-03-01T04:58:19.563 回答
3

使用此代码获得完整年龄,包括年、月和日-

    <?php
     //full age calulator
     $bday = new DateTime('02.08.1991');//dd.mm.yyyy
     $today = new DateTime('00:00:00'); // Current date
     $diff = $today->diff($bday);
     printf('%d years, %d month, %d days', $diff->y, $diff->m, $diff->d);
    ?>
于 2014-03-13T05:58:25.013 回答
2

尝试为此使用DateTime :

$now      = new DateTime();
$birthday = new DateTime('1973-04-18 09:48:00');
$interval = $now->diff($birthday);
echo $interval->format('%y years'); // 39 years

看到它在行动

于 2013-01-31T02:37:17.037 回答
0

这是我的长/详细版本(如果需要,您可以缩短它):

$timestamp_birthdate = mktime(9, 0, 0, $birthdate_month, $birthdate_day, $birthdate_year);
$timestamp_now = time();
$difference_seconds = $timestamp_now-$timestamp_birthdate;
$difference_minutes = $difference_seconds/60;
$difference_hours = $difference_minutes/60;
$difference_days = $difference_hours/24;
$difference_years = $difference_days/365;
于 2014-04-07T03:53:15.390 回答
0

此功能工作正常。

function age($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--;}
 if ($day_diff < 0 && $month_diff < 0){$year_diff--;}
 return $year_diff;
}

见博文

于 2013-05-03T13:14:09.303 回答
0

这有效:

<?
$date = date_create('1984-10-26');
$interval = $date->diff(new DateTime);
echo $interval->y;
?>

如果你告诉我你的$birthday变量是什么格式的,我会给你确切的解决方案

于 2012-04-17T07:29:22.910 回答
0

将 更改$date$birthday

于 2012-04-17T07:30:18.200 回答
0

怎么回事?

strtotime(日期('dmY'))

因此,您从当前时间戳生成日期字符串,然后将日期字符串转换回时间戳?

顺便说一句,它不起作用的原因之一是 strtotime() 假定数字日期的格式为 m/d/y (即美国的日期格式)。另一个原因是公式中没有使用参数($birthday)。

于 2012-04-17T08:40:55.617 回答
0

为了获得超高的准确性,您需要考虑闰年因素:

function get_age($dob_day,$dob_month,$dob_year){
    $year   = gmdate('Y');
    $month  = gmdate('m');
    $day    = gmdate('d');
     //seconds in a day = 86400
    $days_in_between = (mktime(0,0,0,$month,$day,$year) - mktime(0,0,0,$dob_month,$dob_day,$dob_year))/86400;
    $age_float = $days_in_between / 365.242199; // Account for leap year
    $age = (int)($age_float); // Remove decimal places without rounding up once number is + .5
    return $age;
}

所以使用:

echo get_date(31,01,1985);

管他呢...

注意要查看您的确切年龄到小数点

return $age_float

反而。

于 2013-02-20T22:35:57.767 回答