比较时间戳和Carbon :: now() - > toTimeString()没有秒

时间:2017-07-27 10:10:00

标签: mysql laravel php-carbon

我正在构建一个查询,当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子句以忽略秒数吗?

4 个答案:

答案 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)

&#13;
&#13;
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;
&#13;
&#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()