php获取3天内生日人员 dogify php 2020-04-18 4319 次浏览 27 次点赞 # 需求 项目中遇到需要显示3天内生日的人员的需求,查了一波资料,在此作个记录,方便以后查询。 # BiuBiuBiu 数据库中人员信息字段如下所示 | name | birthday | | ------------ | ------------ | | 张三 | 1991-04-19 | | 李四 | 1992-04-20 | | 王五 | 1993-04-21 | | 赵六 | 1994-04-22 | | 孙七 | 1994-04-23 | 假定今日为2020-04-20,我们期望返回生日在04-20到04-22的人员。月和日的判断比较好处理,但是每个人出生的年是不一样的,无法简单的筛选某3天就返回结果。 好在,mysql 提供了类似php格式化日期格式的函数 [`DATE_FORMAT(date,format)`](https://www.w3school.com.cn/sql/func_date_format.asp "`DATE_FORMAT(date,format)`"),第一个参数是要格式化的列名,第二个参数是格式字符串。 以下 SQL 可以将年份统一为2020,且保留日月信息。 `SELECT name,birthday, DATE_FORMAT(birthday, "2020-%m-%d") as format_birthday FROM users` | name | birthday | format_birthday| | ------------ | ------------ | ------ | | 张三 | 1991-04-19 | 2020-04-19 | | 李四 | 1992-04-20 | 2020-04-20 | | 王五 | 1993-04-21 | 2020-04-21 | | 赵六 | 1994-04-22 | 2020-04-22 | | 孙七 | 1994-04-23 | 2020-04-23 | 剩下的问题就很简单了,只要format_birthday在2020-04-20与2020-04-22之间的人就很简单了。 以下是 Laravel 中通过模型查询的代码: ```php $year = date('Y'); User::whereBetween(DB::raw("date_format(birthday, '{$year}-%m-%d')"), [Carbon::now()->toDateString(), Carbon::parse("+3 days")->toDateString()] )->get(); ``` 本文由 dogify 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。 点赞 27
还不快抢沙发