我一直在尝试使用mysql语句和php来获得即将到来的生日。问题是我见过一些解决方案,但他们使用日期字段。不幸的是,我的存储时间戳。如果生日是在1970年之后,下面的代码只会产生结果。我怎样才能得到一个查询,它将给出我即将到来的生日当月,下个月,月后等等?我怎么能让它忽略这一年呢?
$sql_query = "
SELECT mem_id, DATE_FORMAT(FROM_UNIXTIME( birthdate ),'%d/%m/%Y')
)
FROM profiles
WHERE
IF ( MONTH( NOW() ) < 12,
MONTH( DATE_FORMAT(FROM_UNIXTIME( birthdate ),'%Y%m%d') ) = MONTH( NOW() ) + 1,
MONTH( DATE_FORMAT(FROM_UNIXTIME( birthdate ),'%Y%m%d') ) = 1)
ORDER BY birthdate";
答案 0 :(得分:2)
我一直在寻找这个代码,但我找不到干净/简单的查询(也适用于闰年(2月29日问题))
所以我自己做了。
以下是获取接下来x天即将到来的生日的最简单代码(此查询还会显示昨天的生日(或者您可以将其更改为过去的x天数)
SELECT name, date_of_birty FROM users WHERE
DATE(CONCAT(YEAR(CURDATE()), RIGHT(date_of_birty, 6)))
BETWEEN
DATE_SUB(CURDATE(), INTERVAL 1 DAY)
AND
DATE_ADD(CURDATE(), INTERVAL 5 DAY)
答案 1 :(得分:0)
$currentMonth = date('n'); // or date('n', strtotime('+1 month')) or whatever
$query = "SELECT ... WHERE MONTH(FROM_UNIXTIME(`birthday`)) = $currentMonth";
请注意,UNIX时间戳是存储生日的可怕选择:
FROM_UNIXTIME
以进行比较,这非常昂贵。您应该使用原生MySQL DATE
columns来存储日期,这样您就可以存储更广泛的日期,并且查询效率更高。