Anna Jeanine
Anna Jeanine

Reputation: 4125

Comparing timestamp and Carbon::now()->toTimeString() without seconds

I am building a query which will be executed every minute when the daily_at time and the current time are equal. The daily_at variable is a timestamp of for example 10:05:33.

I want the where clause in the query to pass when the hour and minute are the same, but not the second else almost non will be executed. The where clause which I have now:

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

Could someone help me to adjust the where clause to ignore the seconds?

Upvotes: 0

Views: 5269

Answers (4)

Andrew P.
Andrew P.

Reputation: 148

I found the solution. You can use setSeconds(int $value) method:

Carbon::now()->setSeconds(0)->toTimeString()

Upvotes: 1

Robin Hossain
Robin Hossain

Reputation: 705

Can you please try with this way:

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

So final query would be,

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'))

Upvotes: 0

aaron0207
aaron0207

Reputation: 2333

Try with:

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

One more way:

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'))

You can pass an extra argument to set timezone:

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

Upvotes: 1

Ratan Singh
Ratan Singh

Reputation: 1

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

Upvotes: 0

Related Questions