首页 > 解决方案 > 用php计算年龄

问题描述

嘿伙计们,我正在研究我的同事项目,他使用下面的代码来存储数据库中的年龄并显示年龄

他从选择标签中选择日期和月份。

查看BOD 选择标签图像

<?php $today = date("Y");
  $year = $today - 18;?>

     <select class="form-control" id="date" name="day" >
        <option label=01 value=01>01</option>
        <option label=02 value=02>02</option>
        <option>.......</option>            
        <option label=30 value=30>30</option>
        <option label=31 value=31>31</option>
     </select>
     <select class="form-control" id="month" name="month" >
        January
        <option label=January value=01>January</option>
        February
        <option label=February value=02>February</option>
        <option>.......</option>
        November
        <option label=November value=11>November</option>
        December
        <option label=December value=12>December</option>
     </select>  

<select class="form-control" id="year" name="year" >
   <?php for($i = 0; $i <= 75; $i++):?>
     <option value=<?=$year?>><?=$year?></option>
     <?php echo $year = $year -1 ;?>
   <?php endfor;?>
</select>

结果图像

控制器

 public function user_register()
{
    $data = array(          
        'u_day'=>$this->input->post('day'),
        'month'=>$this->input->post('month'),
        'year'=>$this->input->post('year'),
        'age'=>$this->getAge($this->input->post('year')),            
    );
    $id = $this->admin_model->insertData('users',$data);
    $sess = array(
        'userid'=>$id,
        'fname'=>$this->input->post('first_name'),
        'mname'=>$this->input->post('middle_name'),
        'lname'=>$this->input->post('last_name'),
        'gender'=>$this->input->post('gender'),
        'reg'=>'1',
    );
    $this->session->set_userdata($sess);

    redirect($this->config->item('base_url').'profile/basic_details');
}

public function getAge($then) {
    $then_ts = strtotime($then);
    $then_year = date('Y', $then_ts);
    $age = date('Y') - $then_year;
    if(strtotime('+' . $age . ' years', $then_ts) > time()) $age--;
    //print_r($age);exit;
    return $age;
}

当我选择任何其他日期时,它会完美运行。

但是当我选择 (01/01/2000) 日期时,它将年龄存储在数据库中为 -1

标签: phpcodeigniter

解决方案


通过连接字符串生成出生日期。

$date1 = date_create("2013-03-15");  // generate this by "$date-$month-$year"; // your case
$date2 = date("Y-m-d"); // get today's date
$diff = date_diff($date1,$date2);  //here you get the difference

您可以应用数学运算来获得准确的年份和月份。


推荐阅读