时间查询
引入类:
use think\facade\Db;
时间比较的常用方法
框架内置了丰富且便捷的时间查询方法,能够自动识别时间字段的类型,无论时间字段采用何种存储类型,都可使用以下时间查询方式。
使用 whereTime
方法
whereTime
方法为日期和时间字段的查询提供了快捷方式,示例如下:
大于某个时间:
Db::name('user') ->whereTime('birthday', '>=', '1970-10-1') ->select();
小于某个时间:
Db::name('user') ->whereTime('birthday', '<', '2000-10-1') ->select();
时间区间查询:
Db::name('user') ->whereTime('birthday', 'between', ['1970-10-1', '2000-10-1']) ->select();
不在某个时间区间:
Db::name('user') ->whereTime('birthday', 'not between', ['1970-10-1', '2000-10-1']) ->select();
此外,还可使用时间表达式进行时间查询,例如:
// 查询两个小时内的博客 Db::name('blog') ->whereTime('create_time', '-2 hours') ->select();
针对时间区间的快捷方法
whereBetweenTime
和whereNotBetweenTime
方法:// 查询2017年上半年注册的用户 Db::name('user') ->whereBetweenTime('create_time', '2017-01-01', '2017-06-30') ->select(); // 查询不是2017年上半年注册的用户 Db::name('user') ->whereNotBetweenTime('create_time', '2017-01-01', '2017-06-30') ->select();
按年、月、周、天查询
查询某年:
- 查询今年注册的用户:
Db::name('user') ->whereYear('create_time') ->select();
- 查询去年注册的用户:
Db::name('user') ->whereYear('create_time', 'last year') ->select();
- 查询某一年的数据:
// 查询2018年注册的用户 Db::name('user') ->whereYear('create_time', '2018') ->select();
查询某月:
- 查询本月注册的用户:
Db::name('user') ->whereMonth('create_time') ->select();
- 查询上月注册用户:
Db::name('user') ->whereMonth('create_time', 'last month') ->select();
- 查询指定月注册的用户:
// 查询2018年6月注册的用户 Db::name('user') ->whereMonth('create_time', '2018-06') ->select();
查询某周:
- 查询本周数据:
Db::name('user') ->whereWeek('create_time') ->select();
- 查询上周数据:
Db::name('user') ->whereWeek('create_time', 'last week') ->select();
- 查询指定某天开始的一周数据:
// 查询2019-1-1到2019-1-7的注册用户 Db::name('user') ->whereWeek('create_time', '2019-1-1') ->select();
查询某天:
- 查询当天注册的用户:
Db::name('user') ->whereDay('create_time') ->select();
- 查询昨天注册的用户:
Db::name('user') ->whereDay('create_time', 'yesterday') ->select();
- 查询某天的数据:
// 查询2018年6月1日注册的用户 Db::name('user') ->whereDay('create_time', '2018-06-01') ->select();
时间字段区间比较
支持对两个时间字段进行区间比较,例如:
// 查询有效期内的活动
Db::name('event')
->whereBetweenTimeField('start_time', 'end_time')
->select();
上述查询等同于:
// 查询有效期内的活动
Db::name('event')
->whereTime('start_time', '<=', time())
->whereTime('end_time', '>=', time())
->select();
自定义时间查询规则
可通过在数据库配置文件中设置 time_query_rule
来添加自定义的时间查询规则,示例如下:
'time_query_rule' => [
'hour' => ['1 hour ago', 'now'],
],