主要考虑到闰年的情况,如果有人出生在2.29,那么不是闰年则过了2.28将算上一岁。

function age($birth) {
    $age = array();
    //$now = date('Ymd');
    $now = "20110228";
    //分解当前日期为年月日
    $nowyear = (int) ($now / 10000);
    $nowmonth = (int) (($now % 10000) / 100);
    $nowday = $now % 100;

    //分解出生日期为年月日
    $birthyear = (int) ($birth / 10000);
    $birthmonth = (int) (($birth % 10000) / 100);
    $birthday = $birth % 100;

    $year  = $nowyear - $birthyear;
    if ($birthmonth>$nowmonth){
        $year--;
    }else if($birthmonth==$nowmonth){
        if($birthday==29&&$birthmonth=2){
/*          if($nowyear>3200||($nowyear%3200==0&&$nowyear%172800==0)){
                if($birthday>$nowday){
                    $year--;
                }
            }else if($nowyear==3200){
                if (($birthday>$nowday)&&$nowday!=28){
                    $year--;
                }
            }else */
            if ($nowyear%400==0||(($nowyear%4==0)&&($nowyear%100!=0))){
                if($birthday>$nowday){
                    $year--;
                }
            }
        }
    }
    return $year;
}