求大神计算年龄计算如何多出小点数

查看 136|回复 9
作者:h9271   
现有代码计算出来的是整岁,我想在整岁后面、根据当前日期天数加上小点数该怎么改呢?
例如21岁,根据当前日期得出21.XX岁
[PHP] 纯文本查看 复制代码function getAge($id){

# 1.从身份证中获取出生日期
$id = $id;//身份证
$birth_Date = strtotime(substr($id, 6, 8));//截取日期并转为时间戳

# 2.格式化[出生日期]
$Year = date('Y', $birth_Date);//yyyy
$Month = date('m', $birth_Date);//mm
$Day = date('d', $birth_Date);//dd

# 3.格式化[当前日期]
$current_Y = date('Y');//yyyy
$current_M = date('m');//mm
$current_D = date('d');//dd

# 4.计算年龄()
$age = $current_Y - $Year;//今年减去生日年
if($Month > $current_M || $Month == $current_M && $Day > $current_D){//深层判断(日)
$age--;//如果出生月大于当前月或出生月等于当前月但出生日大于当前日则减一岁
}
# 返回
return $age;

}

点数, 日期

SailZhao520   

[PHP] 纯文本查看 复制代码function getAge($id){
  # 1.从身份证中获取出生日期
  $id = $id;//身份证
  $birth_Date = strtotime(substr($id, 6, 8));//截取日期并转为时间戳
  # 2.格式化[出生日期]
  $Year = date('Y', $birth_Date);//yyyy
  $Month = date('m', $birth_Date);//mm
  $Day = date('d', $birth_Date);//dd
  # 3.格式化[当前日期]
  $current_Y = date('Y');//yyyy
  $current_M = date('m');//mm
  $current_D = date('d');//dd
  # 4.计算年龄()
  $age = $current_Y - $Year;//今年减去生日年
  $age_diff = date_diff(date_create(date('Y-m-d', $birth_Date)), date_create(date('Y-m-d')));
  $age_decimal = $age_diff->format('%a') / (date('L', $birth_Date) ? 366 : 365);
  if($Month > $current_M || $Month == $current_M && $Day > $current_D){//深层判断(日)
    $age--;//如果出生月大于当前月或出生月等于当前月但出生日大于当前日则减一岁
  }
  # 返回
  return number_format($age + $age_decimal, 2);
}
wkfy   

return $age.'.'.$Day;
wkfy   

抱歉,理解错误,还以为你要串联岁+当前日期。你这是要计算当前日期处于今年的第几天,然后求助小数值是吧?
h9271
OP
  


wkfy 发表于 2023-3-12 09:03
抱歉,理解错误,还以为你要串联岁+当前日期。你这是要计算当前日期处于今年的第几天,然后求助小数值是吧 ...

您好 看别人在excel 中公式是这样的,但我不知道怎么运用到上述代码中、还请大神帮忙解答,只需要套用这个年龄计算公式即可
"

h9271
OP
  

目前已解决、感谢各位大神关注
[PHP] 纯文本查看 复制代码//计算年龄
$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,$Month,$Day,$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
//echo $ageNow;
$applyage = substr($age_float , 0 , 5);//取小数点,前5位数字;
独立勿扰   


h9271 发表于 2023-3-12 14:31
目前已解决、感谢各位大神关注
[mw_shl_code=php,true]//计算年龄

你这个没考虑闰年的情况吧。
应该是获取一下当前年的天数,
h9271
OP
  


独立勿扰 发表于 2023-3-13 08:44
你这个没考虑闰年的情况吧。
应该是获取一下当前年的天数,

源代码如下、如果要考虑闰年的情况应该要怎么做呢,望大神解答、加以改进
[PHP] 纯文本查看 复制代码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;
}
kk7758520   

如果你需要修改,可以通过参数 '$precision:如下
function getAge($id, $precision = 1) {
    # 1.从身份证中获取出生日期
    $id = $id; //身份证
    $birth_Date = strtotime(substr($id, 6, 8)); //截取日期并转为时间戳
    # 2.获取出生年月日
    $Year = date('Y', $birth_Date); //yyyy
    $Month = date('m', $birth_Date); //mm
    $Day = date('d', $birth_Date); //dd
    # 3.获取当前年月日
    $current_Y = date('Y'); //yyyy
    $current_M = date('m'); //mm
    $current_D = date('d'); //dd
    # 4.计算年龄
    $age = $current_Y - $Year; //今年减去生日年
    if ($Month > $current_M || $Month == $current_M && $Day > $current_D) { //深层判断(日)
        $age--; //如果出生月大于当前月或出生月等于当前月但出生日大于当前日则减一岁
    }
    # 5.加上年龄精度值
    $age += $precision;
    # 返回
    return $age;
}
在这里,我添加了一个新的参数 '$precision$precision = 0.1。这将在年龄的整数值后面添加一个小数点和一位小数。
kk7758520   


SailZhao520 发表于 2023-3-13 15:09
[mw_shl_code=php,true]function getAge($id){
  # 1.从身份证中获取出生日期

这个函数已经实现了保留小数点后一位的功能,但是计算小数点的代码有点复杂,可以使用更简单的方式来实现:
您需要登录后才可以回帖 登录 | 立即注册

返回顶部