天天看點

tp5.1 時間查詢

官方文檔:​​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+​

​)

// 查詢有效期内的活動
Db::name('event')
    ->whereBetweenTimeField('start_time','end_time')
    ->select();      
// 查詢有效期内的活動
Db::name('event')
    ->whereTime('start_time', '<=', time())
    ->whereTime('end_time', '>=', time())
    ->select();      

繼續閱讀