У меня есть система, где мне нужно планировать сообщения.У каждого пользователя есть свой часовой пояс.У меня есть один сервер и часовой пояс сервера установлен на EET
.Таблицы базы данных:
messages:
id int not null,
user_id int,
schedule DATETIME DEFAULT NULL
user:
id
name
timezone: string (php compatible timezone string e.g. Europe/Paris, Europe/Budapest, etc)
Поэтому я хочу создать задание cron, каждую минуту проверять базу данных и проверять, есть ли какие-либо сообщения, которые мне нужно отправить.Но здесь я застрял с этими часовыми поясами.
Я храню DateTime со смещением часового пояса, например:
new \DateTime('2019-01-01 01:01:01', new \DateTimeZone('Europe/Paris'));
Так что теперь у меня есть проблема: я могу 'Я не использую такой запрос, потому что часовой пояс не проверен.
SELECT * FROM messages as m
JOIN user as u
ON u.id = m.user_id
WHERE m.schedule <= NOW() ORDER BY id DESC;
Поэтому мне нужно найти решение, как получать сообщения в соответствии с часовым поясом пользователя.Пример:
1st user timezone: `CET + 2`
2nd user timezone: `CET + 3`
server time: `CET + 5`
I need to get messages according to each users DateTime + timezone.
Возможно, сохраните его в UTC и сравните на стороне php, но я думаю, что может быть лучшее решение.
еще одно решение - SELECT DISTINCT timezone from user
, а затем выберите сообщения в соответствии с каждым часовым поясом отдельно.