Ну, сначала вы должны получить все часовые пояса в базе данных, а затем выбрать тот, для которого это 9 часов утра:
$tzs = User::select('timezone')->distinct()->pluck('timezone');
$applicableTimezones = $tzs->filter(function ($timezone) {
$localTime = Carbon::now(new DateTimeZone($timezone));
return $localTime->hour == 9
&& $localTime->minute == 0
&& $localTime->dayOfWeek == Carbon::MONDAY;
});
$users = User::whereIn('timezone', $applicableTimezones)->get();
Это требует 2 запроса, но если вы используете индекс для часовых поясов, он не будетпотребуйте цикл базы данных для всех пользователей и вместо этого используйте индекс.