Планирование заданий каждые N минут в разные дни

Я должен запустить Cronjob в определенное время:

Первый: будни с 9:00 до 18:00 каждые 2 минуты

Второй: суббота с 10:00 до 18:00 каждые 2 минуты

Самое дальнее, что я мог получить, это:

$schedule->call(function () {
    (new SendSMS())->run();
})->weekdays()->between('9:00', '18:00');

Я не знаю, как добавить ограничение everyTwoMinutes, так как я нашел только эти методы:

->everyMinute();    
->everyFiveMinutes();
->everyTenMinutes();
->everyThirtyMinutes();

И вторая проблема заключается в том, что для второго условия я не хочу добавлять другое расписание, например:

$schedule->call(function () {
    (new SendSMS())->run();
})->saturdays()->between('11:00', '18:00');

Я хотел бы написать один совпадающий оба раза, это возможно?

2 ответа

Решение

Обновлено: это будет работать с нужными интервалами.

    $schedule->call(function () {
        $datetime = date('Y-m-d H:i:s');
        echo $datetime;
    })->everyMinute()->when(function() {

        $now = new \DateTime();

        # don't run on Sundays
        if ($now->format('l') == 'Sunday') {
            return false;
        }

        # run every two minutes
        if ($now->format('i')%2 == 1) {
            return false;
        }

        if ($now->format('l') == 'Saturday') {
            $start_date = new \DateTime('today 10:00');
            $end_date = new \DateTime('today 18:00');
            return ($start_date <= $now && $now < $end_date);
        } else {
            $start_date = new \DateTime('today 09:00');
            $end_date = new \DateTime('today 18:00');
            return ($start_date <= $now && $now < $end_date);
        }
    });

Вы можете сделать свою собственную функцию в классе, который расширяет Event

public function everyTwoMinutes()
{
    return $this->cron('*/2 * * * * *');
}
Другие вопросы по тегам