2017-07-27 46 views
0

我正在構建一個查詢,當daily_at時間和當前時間相等時,它將每分鐘執行一次。變量daily_at是例如10:05:33的時間戳。比較時間戳和Carbon :: now() - > toTimeString()沒有秒

我希望查詢中的where子句在小時和分鐘相同時通過,但不是第二個其他幾乎不會執行。 where子句我現在有:

DB::table('restaurants') 
    ->where('schedule', '=', $schedule) 
    ->where('active', '=', 1) 
    ->whereDate('start_at', '<=', Carbon::today()) 
    ->where('daily_at', '=', Carbon::now()->toTimeString()) 
    ..... 

有人能幫助我調整where條款忽略秒?

回答

0

DB::table('restaurants') 
 
->where('schedule', '=', $schedule) 
 
->where('active', '=', 1) 
 
->whereDate('start_at', '<=', Carbon::today()) 
 
->where('daily_at', '=', Carbon::now('Y-m-d H:i')->toTimeString()) 
 
use this code

+0

這不是工作:'未知或壞的時區(Y-M-d H:我)'。而'daily_at'沒有Y-m-d,所以它不會工作 –

1

嘗試用:

DB::table('restaurants') 
->where('schedule', '=', $schedule) 
->where('active', '=', 1) 
->whereDate('start_at', '<=', Carbon::today()) 
->where('daily_at', '=', Carbon::now()->format('H:i')) 

另一種方式:

DB::table('restaurants') 
    ->where('schedule', '=', $schedule) 
    ->where('active', '=', 1) 
    ->whereDate('start_at', '<=', Carbon::today()) 
    ->where('daily_at', '=', Carbon::createFromTime(Carbon::now()->hour,Carbon::now()->minute,00)->format('H:i:s')) 

你可以傳遞一個額外的參數設置時區:

Carbon::createFromTime(Carbon::now()->hour,Carbon::now()->minute,00,'Example/Zone')->format('H:i:s') 
+0

太好了!現在我只需要從daily_at –

+0

得到小時和分鐘不錯!你需要什麼?也許我可以幫助你。你會將我的答案設置爲正確答案嗎? – aaron0207

+0

現在'daily_at'的值是例如H:i:s。我需要失去'daily_at'的秒數,並且只有H:i才能進行比較! –

0

可以請你這樣嘗試:

whereRaw(DATE_FORMAT(daily_at, "%H:%i") = Carbon::now()->format('H:i')) 

所以最終的查詢是,

DB::table('restaurants') 
->where('schedule', '=', $schedule) 
->where('active', '=', 1) 
->whereDate('start_at', '<=', Carbon::today()) 
->where('daily_at', '=', Carbon::now()->toTimeString()) 
->whereRaw(DATE_FORMAT(daily_at, "%H:%i") = Carbon::now()->format('H:i'))