简体   繁体   English

Laravel 在 x 小时分秒后延迟队列作业调度

[英]Laravel delay queue job dispatch after x hour minutes second

I have set my laravel timezone to 'Asia/Kolkata' which is 5:30 hrs ahead of GMT.我已将 Laravel 时区设置为“亚洲/加尔各答”,比格林威治标准时间早 5:30。 When i am dispatching job, job is starting after 5:30 hours dispatching which should as all customers are from same timezone.当我调度工作时,工作在 5:30 小时后开始调度,因为所有客户都来自同一时区。 Also, it is showing available at 5:30 hrs ahead.此外,它会在 5:30 之前显示可用。 Like when i am setting it to start at 4:30 when current time is 3:30, job delay is taking 5:30 hrs ahead and starting at 10:00.就像我将其设置为在当前时间为 3:30 时的 4:30 开始时一样,作业延迟需要提前 5:30 小时并从 10:00 开始。

I have tried setting Linux,laravel timezone, php artisan config:cache, still it is taking 5:30 hrs ahead.我试过设置 Linux、laravel 时区、php artisan config:cache,仍然需要提前 5:30 小时。

My code:我的代码:

$diff = strtotime($start_time) - strtotime($current_datetime);
        $job_delay_hour = date("H", $diff);
        $job_delay_minute = date("i", $diff);
        $job_delay_second = date("s", $diff);

$job_id = $this->dispatch(($job)
            ->onQueue('splitter')
            ->delay(now()->addHour($job_delay_hour)->addMinutes($job_delay_minute)->addSeconds($job_delay_second)));

You can use Carbon instance to get specific date.您可以使用 Carbon 实例来获取特定日期。 Complete example regarding to Laravel v6.x.关于 Laravel v6.x 的完整示例。 Should be work on old versions too:也应该适用于旧版本:

public function store() {
    // some stuff

    // after 10 minutes
    $on = \Carbon\Carbon::now()->addMinutes(10);        

    dispatch(new \App\Jobs\SomeJob(...$someVariables))->delay($on);
}

fixed it修复

$job_id = $this->dispatch(($job)
        ->onQueue('splitter')->delay($diff);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM