可能重复:
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;
}
答案 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