我有一个名为“用户”的 MYSQL 表。在此表中,每个用户都有一行。在每一行中,我都有一个名为“created”的列,其中包含创建帐户时的时间戳,这是模板“0000-00-00 00:00:00”。我还有一个专栏叫“年龄”。我想要的是,当用户登录时,可以显示他/她的年龄。处理这种情况的最佳方法是什么,以便可以将用户年龄(以天为单位)放置在列中并显示?
问问题
1200 次
4 回答
1
要检索以天为单位的“年龄”(即当前日期时间的午夜和存储在列中的日期时间(或时间戳)值的午夜之间的整数天数之差created
:
SELECT DATEDIFF(NOW(),u.created) AS age_in_days
, ...
FROM users u
WHERE ...
要使用相同的计算填充age
列:
UPDATE users u
SET u.age = DATEDIFF(NOW(),u.created)
WHERE ...
如果您想通过包含时间分量来稍微不同地计算“年龄”,
SELECT TIMESTAMPDIFF(DAY,u.created,NOW()) AS age_in_days
请注意,结果略有不同,它在计算天数时考虑了时间分量。考虑:
SELECT TIMESTAMPDIFF(DAY,'2013-02-02 18:59','2013-02-03 14:00') AS age0
, DATEDIFF('2013-02-03 14:00','2013-02-02 18:59') AS age1
假设您想保留此值,将“年龄”值存储在列中似乎有点多余。任何有谓词的查询age
,例如
WHERE u.age > 100
可以同样有效地针对created
列编写:
WHERE u.created > NOW() + INTERVAL -100 DAY
但这确实会返回稍微不同的结果,因为它考虑了时间分量。仅对日期部分进行比较,效率会降低:
WHERE DATE(u.created) > CURDATE() + INTERVAL -100 DAY
于 2013-02-03T00:29:41.150 回答
0
Assuming that your creation date really is a timestamp, and that it's called creationdate
:
SELECT YEAR(NOW()) - YEAR(creationdate) - (DATE_FORMAT(NOW(), '%m%d') < DATE_FORMAT(creationdate, '%m%d')) AS age FROM whatever
This runs inside MySQL so you can return it as part of the SELECT where you obtain the user's information.
于 2013-02-03T00:09:52.707 回答
0
Try using DateTime for this:
$now = new DateTime();
$birthday = new DateTime('1973-04-18 09:48:00');
$interval = $now->diff($birthday);
echo $interval->format('%a days');
于 2013-02-03T00:10:24.540 回答
0
您可以使用 strtotime() 函数将 TIMESTAMP 转换为 unix 时间,使用 time() 获取当前 unix 时间,从当前时间中减去生日时间并将其转换为年。
于 2013-02-03T00:15:05.647 回答