CRON JOB - 为不同的时区安排Laravel命令 - 管理用户本地时间

时间:2017-10-13 21:55:14

标签: php laravel cron laravel-5.4

我正在使用Laravel 5.4,我希望thursdays8pm

向用户发送通知

假设我有

  1. 东京的用户A
  2. 伦敦用户B
  3. 纽约市的用户C
  4. 问题

    我应如何设置CRON JOB,以便他们在当地时间8pm收到通知?

    我的服务器位于纽约市

    代码

    $schedule->command('sendNotifications')->dailyAt('20:00')->thursdays()

2 个答案:

答案 0 :(得分:3)

只需使用一个$schedule->command('sendNotifications')命令和一些参数即可完成此逻辑。

第一步,如果尚未完成,请设置服务器并添加一个调用Laravel artisan命令的Cron作业:

* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1

选项I

第二步将您的日程安排命令更改为:

$schedule->command('sendNotifications')->everyFifteenMinutes();或  $schedule->command('sendNotifications')->everyThirtyMinutes();或  $schedule->command('sendNotifications')->hourly();

取决于您想要的确切程度,因为某些时区的偏移量为30或45分钟,请参阅https://www.timeanddate.com/time/time-zones-interesting.html

现在,如果执行了命令sendNotifications,则必须在那里构建逻辑:

  • 检查世界某处是星期四,如果没有取消
  • 将时区/县置于当前20:00的位置,如果是公差的话 需要
  • 让所有用户进入其中一个时区/县并发送 通知给他们

备选方案II

当然,您可以编写40多个不同的命令,每个时区一个,
并使用这样的调度程序:

$schedule->command('sendNotifications_1')
          ->timezone('America/Chicago')
          ->thursdays()
          ->dailyAt('20:00');


$schedule->command('sendNotifications_2')
          ->timezone('Europe/London')
          ->thursdays()
          ->dailyAt('20:00');

$schedule->command('sendNotifications_3')
          ->timezone('Asia/Tokyo')
          ->thursdays()
          ->dailyAt('20:00');

答案 1 :(得分:2)

好吧,我不知道laravel是否有这个功能。

但您可以每小时设置一次cron作业,以检查用户当前时间(带时区)是否为上午8点,以及我们是否尚未向他们发送通知。

对于这些用户,您可以发送通知。