我正在构建一个查询,当daily_at
时间和当前时间相等时,该查询将每分钟执行一次。 daily_at
变量是例如10:05:33
的时间戳。
我希望查询中的where
子句在小时和分钟相同时通过,但不会执行其他几乎不执行的其他操作。我现在的where子句:
DB::table('restaurants')
->where('schedule', '=', $schedule)
->where('active', '=', 1)
->whereDate('start_at', '<=', Carbon::today())
->where('daily_at', '=', Carbon::now()->toTimeString())
.....
有人可以帮我调整where
子句以忽略秒数吗?
答案 0 :(得分: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')
答案 1 :(得分: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
&#13;
答案 2 :(得分: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'))
答案 3 :(得分:0)
我找到了解决方案。您可以使用setSeconds(int $value)
方法:
Carbon::now()->setSeconds(0)->toTimeString()