CRON JOB - График на команда Laravel за различни часови зони - Управление на потребителите по местно време

Използвам Laravel 5.4 и обичам да изпращам известия до потребителите на thursdays в 8pm

Да кажем, че имам

  1. Потребител А в Токио
  2. Потребител B в Лондон
  3. Потребител C в Ню Йорк

Въпроси

Как трябва да настроя CRON JOB, така че всички те да получават известието в 8pm в тяхното местно време?.

Моят сървър е в Ню Йорк

Код

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


person Léo Coco    schedule 13.10.2017    source източник


Отговори (2)


Тази логика не може да се направи само с една: $schedule->command('sendNotifications') команда и някои параметри.

Първа стъпка, ако още не е направена, настройте вашия сървър и добавете задание на Cron, което извиква командата Laravel artisan:

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

Вариант I

Втора стъпка променете командата си за график на:

$schedule->command('sendNotifications')->everyFifteenMinutes(); or $schedule->command('sendNotifications')->everyThirtyMinutes(); or $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');
person Webdesigner    schedule 16.10.2017

Е, не знам дали laravel има тази функционалност.

Но можете да зададете задача на cron за всеки час, за да проверите дали текущият час на потребителите (с часовата зона) е 8 сутринта и дали не сме им изпратили известие.

И на тези потребители можете да изпратите известието.

person teju c    schedule 13.10.2017