从出生日期开始年龄?

时间:2012-11-05 17:53:46

标签: php sql date-of-birth

  

可能重复:
  How to calculate age (in years) based on Date of Birth and getDate()

我试图回应一个存在于mysql表中的出生日期的人。我可以输入一段代码吗?

目前它只是显示出生日期,因为这就是我要求它做的所有事情,但我想要一种显示年龄的方法,如果可能的话。

这是users.php中的while循环:

 <?

            $platinum_set = get_platinum_user();
            while ($platinum = mysql_fetch_array($platinum_set)) {
                echo"
                <div class=\"platinumcase\">
                <a href=\"profile.php?id={$platinum['id']}\"><img width=80px height= 80px src=\"data/photos/{$platinum['id']}/_default.jpg\" class=\"boxgrid\"/></a><h58> {$platinum['first_name']} {$platinum['last_name']}</h58><br/><br/>

    <h52>{$platinum['dob']}<br/>


<br/>{$platinum['location']}</h52>
                    </div>";
                }
            ?>

这是功能:

function get_platinum_user() {
            global $connection;
            $query = "SELECT *
                        FROM ptb_users, ptb_profiles
                        WHERE ptb_users.account_type = \"User\"
                        AND ptb_users.account_status = \"Active\"
                        AND ptb_profiles.user_id = ptb_users.id
                        AND ptb_users.subscription = \"Platinum\"
                        LIMIT 0 , 30";
            $platinum_set = mysql_query($query, $connection);
            confirm_query($platinum_set);
            return $platinum_set;
        }

4 个答案:

答案 0 :(得分:0)

您可以使用类似

的内容
(time() - strtotime($platinum['dob'])) to get the number of seconds

获得此值后,根据闰年等年份将其转换为年份。

来自Stackoverflow Seconds to Year

的示例

你可以制作一个计算年数的函数

$x = strtotime( $platinum['dob']) );

$sy = 31536000  // seconds a non leap year
$sb = 126230400  // seconds a block of 3 non leap years and one that is

$actual_year = (floor((($x + $sy) / $sb)) + 492) * 4 + 
              (min(floor((($x + $sy) % $sb) / $sy) + 1, 4));

答案 1 :(得分:0)

让人的DOB为d1 / m1 / y1, 而今天的日期是d2 / m2 / y2,

现在,

$y = $y2 - $y1;
$m = $m2 - $m1;
$d = $d2 - $d1;

if($m>0) {$age=$y}

else if($m<0) {$age=$y-1}

else if($d>0) {$age=$y}

else if($d<0) {$age=$y-1}
else{echo 'happy birthday!'}

答案 2 :(得分:0)

SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(dob, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(dob, '00-%m-%d')) AS age

自年龄以来工作。您的Mysql版本可能会受到支持 - 您是否正在使用Mysql?

然后你也可以创建一个函数I found it on the manual page of Mysql Date and Time functions,这是一个访问数据库的日期和时间相关内容的地方:

CREATE FUNCTION age (_d DATETIME) RETURNS INTEGER
COMMENT 'Given birthdate, returns current age'
RETURN YEAR(NOW()) - YEAR(_d) - IF(DATE_FORMAT(_d, '%c%d') > DATE_FORMAT(NOW(), '%c%d'), 1, 0);

首先减去现在和日期之间的年份,然后检查月中的某一天是在现在之前还是之后,并相应地处理它。我会说这很直截了当。当然,你会像使用相同的逻辑那样冷却。

如果您不将dob存储为日期时间,请在将其传递给函数之前将其转换为日期时间:

SELECT *, age(dob) AS age FROM ....

您会在名称age下的结果集中找到它,就像$platinum['age']一样,以防您遇到问题。

答案 3 :(得分:0)

SELECT YEAR(now()) - YEAR(birth_date) - (DAYOFYEAR(now()) <= DAYOFYEAR(birth_date)) AS age

e.g。

birth_day = 2005-04-03   (bday already occured this year)
now = 2012-11-05

    2012 - 2005 - (310 <= 93)
    7 - (false aka 0)
    7

birth_day = 2005-11-06 (bday hasn't occured yet this year)
now = 2012-11-05

    2012 - 2005 - (309 <= 310)
    7 - (true aka 1)
    6