时间查询

引入类:

use think\facade\Db;

时间比较的常用方法

框架内置了丰富且便捷的时间查询方法,能够自动识别时间字段的类型,无论时间字段采用何种存储类型,都可使用以下时间查询方式。

使用 whereTime 方法

whereTime 方法为日期和时间字段的查询提供了快捷方式,示例如下:

  1. 大于某个时间

    Db::name('user')
     ->whereTime('birthday', '>=', '1970-10-1')
     ->select();
  2. 小于某个时间

    Db::name('user')
     ->whereTime('birthday', '<', '2000-10-1')
     ->select();
  3. 时间区间查询

    Db::name('user')
     ->whereTime('birthday', 'between', ['1970-10-1', '2000-10-1'])
     ->select();
  4. 不在某个时间区间

    Db::name('user')
     ->whereTime('birthday', 'not between', ['1970-10-1', '2000-10-1'])
     ->select();

    此外,还可使用时间表达式进行时间查询,例如:

    // 查询两个小时内的博客
    Db::name('blog')
     ->whereTime('create_time', '-2 hours')
     ->select();

针对时间区间的快捷方法

  1. whereBetweenTimewhereNotBetweenTime 方法

    // 查询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();

按年、月、周、天查询

  1. 查询某年

    • 查询今年注册的用户:
    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();
  2. 查询某月

    • 查询本月注册的用户:
    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();
  3. 查询某周

    • 查询本周数据:
    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();
  4. 查询某天

    • 查询当天注册的用户:
    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'],
],
目录
设置
主题设置
深色模式
字体设置
字体大小
16