轉自(https://www.kancloud.cn/manual/thinkphp5_1/354029)
時間比較
使用where
方法
where
方法支持時間比較,例如:
// 大於某個時間 where('create_time', '> time', '2016-1-1'); // 小於某個時間 where('create_time', '<= time', '2016-1-1'); // 時間區間查詢 where('create_time', 'between time', ['2015-1-1', '2016-1-1']);
第三個參數可以傳入任何有效的時間表達式,會自動識別你的時間字段類型,支持的時間類型包括timestamps
、datetime
、date
和int
。
使用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('user') ->whereTime('birthday', '1970-10-1') ->select(); // 時間區間查詢 Db::name('user') ->whereTime('birthday', ['1970-10-1', '2000-10-1']) ->select();
針對時間的區間查詢,系統還提供了一個whereBetweenTime
快速方法
// 查詢2017年上半年注冊的用戶 Db::name('user') ->whereBetweenTime('create_time', '2017-01-01', '2017-06-30') ->select(); // 查詢2017年6月1日注冊的用戶 Db::name('user') ->whereBetweenTime('create_time', '2017-06-01') ->select();
沒有指定結束時間的話,表示查詢當天。
查詢某天
有兩種方式查詢某一天的數據
// 查詢2017年6月1日注冊的用戶 Db::name('user') ->whereBetweenTime('create_time', '2017-06-01') ->select(); // 或者使用whereTime方法 Db::name('user') ->whereTime('create_time',['2017-06-01', '2017-06-02']) ->select();
時間表達式
還提供了更方便的時間表達式查詢,例如:
// 獲取今天的博客 Db::name('blog') ->whereTime('create_time', 'today') ->select(); // 獲取昨天的博客 Db::name('blog') ->whereTime('create_time', 'yesterday') ->select(); // 獲取本周的博客 Db::name('blog') ->whereTime('create_time', 'week') ->select(); // 獲取上周的博客 Db::name('blog') ->whereTime('create_time', 'last week') ->select(); // 獲取本月的博客 Db::name('blog') ->whereTime('create_time', 'month') ->select(); // 獲取上月的博客 Db::name('blog') ->whereTime('create_time', 'last month') ->select(); // 獲取今年的博客 Db::name('blog') ->whereTime('create_time', 'year') ->select(); // 獲取去年的博客 Db::name('blog') ->whereTime('create_time', 'last year') ->select();
如果查詢當天、本周、本月和今年的時間,還可以簡化為:
// 獲取今天的博客 Db::name('blog') ->whereTime('create_time', 'd') ->select(); // 獲取本周的博客 Db::name('blog') ->whereTime('create_time', 'w') ->select(); // 獲取本月的博客 Db::name('blog') ->whereTime('create_time', 'm') ->select(); // 獲取今年的博客 Db::name('blog') ->whereTime('create_time', 'y') ->select();
還可以使用下面的時間表達式進行時間查詢
// 查詢兩個小時內的博客 Db::name('blog') ->whereTime('create_time','-2 hours') ->select();
多個時間字段區間比較(V5.1.17+
)
V5.1.17+
版本開始,可以支持對兩個時間字段的區間比較
// 查詢有效期內的活動 Db::name('event') ->whereBetweenTimeField('start_time','end_time') ->select();
上面的查詢相當於
// 查詢有效期內的活動 Db::name('event') ->whereTime('start_time', '<=', time()) ->whereTime('end_time', '>=', time()) ->select();