根据出生日期计算年龄

Posted

技术标签:

【中文标题】根据出生日期计算年龄【英文标题】:Calculate age based on date of birth 【发布时间】:2013-10-31 12:24:12 【问题描述】:

我在 sql 中有一个用户表,他们每个人都有出生日期。我想将他们的出生日期转换为他们的年龄(仅限年),例如日期:15.03.1999 年龄:14 和 15.03.2014 将更改为年龄:15

这里我要显示用户的日期:

if(isset($_GET['id']))

    $id = intval($_GET['id']);
    $dnn = mysql_fetch_array($dn);
    $dn = mysql_query('select username, email, skype, avatar, ' .
        'date, signup_date, gender from users where id="'.$id.'"');
    $dnn = mysql_fetch_array($dn);
    echo "$dnn['date']";

【问题讨论】:

Calculate Age in MySQL (InnoDb)的可能重复 大概您的日期是使用日期数据类型存储的? 那里有很多“计算年龄”的答案。谷歌是一个强大的工具!但顺便说一句:不要使用 mysql_* 函数。使用 PDO 或 MySQLi 获取当前日期/时间并从数据库中减去转换后的日期/时间...然后将其转换回年数,使用正确格式的 strtotime() 和 date()。 以前从来没有人这样做过,这不是很神奇吗? 【参考方案1】:

对于格式为 Date/Month/Year

的生日日期
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;

或接受日、月、年作为参数的相同函数:

function age($day, $month, $year)
 $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;

你可以这样使用它:

echo age("20/01/2000");

这将输出正确的年龄(6 月 4 日,即 14 岁)。

【讨论】:

【参考方案2】:

php >= 5.3.0

# object oriented
$from = new DateTime('1970-02-01');
$to   = new DateTime('today');
echo $from->diff($to)->y;

# procedural
echo date_diff(date_create('1970-02-01'), date_create('today'))->y;

demo

函数:date_create()date_diff()


MySQL >= 5.0.0

SELECT TIMESTAMPDIFF(YEAR, '1970-02-01', CURDATE()) AS age

demo

函数:TIMESTAMPDIFF()CURDATE()

【讨论】:

@PHPupil: date_diff 适用于 PHP 版本 >= 5.3.0。 @PHPupil:升级 PHP? ;) 或使用 MySQL 解决方案。 这不适用于 1 岁以下的出生日期...显示 0 不一定适合年龄 @RymanHolmes:如果您需要显示 1 岁,而不是 0,请显示。一个简单的 if 语句解决了这个问题。问题出在哪里?【参考方案3】:

声明@dateOfBirth date select @dateOfBirth = '2000-01-01'

SELECT datediff(YEAR,@dateOfBirth,getdate()) as Age

【讨论】:

【参考方案4】:
 $dob = $this->dateOfBirth; //Datetime 
        $currentDate = new \DateTime();
        $dateDiff = $dob->diff($currentDate);
        $years = $dateDiff->y;
        $months = $dateDiff->m;
        $days = $dateDiff->d;
        $age = $years .' Year(s)';

        if($years === 0) 
            $age = $months .' Month(s)';
            if($months === 0) 
                $age = $days .' Day(s)';
            
        
        return $age;

【讨论】:

【参考方案5】:

从网上得到这个脚本(感谢coffeecupweb)

<?php
/**
 * Simple PHP age Calculator
 * 
 * Calculate and returns age based on the date provided by the user.
 * @param   date of birth('Format:yyyy-mm-dd').
 * @return  age based on date of birth
 */
function ageCalculator($dob)
    if(!empty($dob))
        $birthdate = new DateTime($dob);
        $today   = new DateTime('today');
        $age = $birthdate->diff($today)->y;
        return $age;
    else
        return 0;
    

$dob = '1992-03-18';
echo ageCalculator($dob);
?>

【讨论】:

【参考方案6】:

获取年龄的代码非常小:

<?php
    $dob='1981-10-07';
    $diff = (date('Y') - date('Y',strtotime($dob)));
    echo $diff;
?>

//output 35

【讨论】:

这是如何获得 11 票的?一个人的年龄也取决于一年中的日期和月份。 如果某人有 DOB ex,则您的方法不正确。 1991 年 13 月 10 日,当前月份是 7 月,那么年龄是 27 岁,这是错误的。该人的年龄为 26 岁,直到当前月份等于或大于 DOB 月份。【参考方案7】:

参考链接http://www.calculator.net/age-calculator.html

$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/>";

【讨论】:

【参考方案8】:

有一种简单的方法可以使用 PHP 的 substr 从任何生日中查找日期

$birth_date = '15.03.2014';
$date = substr($birth_date, 0, 2);
echo $date;

这只会简单地为您提供该出生日期的输出日期。

在这种情况下,这将是 15

更多信息请参见substr of PHP...

【讨论】:

该问题询问的是年龄,而不是某人出生的 2 位数年份。【参考方案9】:

要从出生日期计算年龄,使用这样的查询。

'SELECT username, email, skype, avatar, TIMESTAMPDIFF(YEAR, date, CURDATE()) AS age, signup_date, gender FROM users WHERE id="'.$id.'"';


if(isset($_GET['id']))

    $id = intval($_GET['id']);

    $dn = mysql_query('select username, email, skype, avatar, TIMESTAMPDIFF(YEAR, date, CURDATE()) AS age, signup_date, gender from users where id="'.$id.'"');

    $dnn = mysql_fetch_array($dn);

    echo $dnn['age'];

注意:不要使用保留关键字列名。

【讨论】:

【参考方案10】:

我希望你会发现这很有用。

$query1="SELECT TIMESTAMPDIFF (YEAR, YOUR_DOB_COLUMN, CURDATE()) AS age FROM your_table WHERE id='$user_id'";
$res1=mysql_query($query1);
$row=mysql_fetch_array($res1);
echo $row['age'];

【讨论】:

【参考方案11】:
$getyear = explode("-", $value['users_dob']);
$dob = date('Y') - $getyear[0];

$value['users_dob'] 是数据库值,格式为yyyy-mm-dd

【讨论】:

以上是关于根据出生日期计算年龄的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句如何根据出生日期计算年龄

算农历出生日期计算器,根据出生日期怎么算年龄?

Oracle 根据出生日期计算年龄

SQL语句如何根据出生日期计算年龄

出生日期直接算出年龄,excel按出生日期算年龄函数

MySQL根据出生日期计算年龄的五种方法比较