Наивно, вы можете собрать (или каким-то образом определить ) идентификатор часового пояса ( tzid ) для каждого из ваших пользователей и просто запустить задание cron в верхней части каждого UTC.часовая проверка, является ли текущее время 06:00 в любой из этих зон.
Это не так просто, потому что есть несколько часовых поясов, которые не имеют часовых смещений от UTC, таких как Америка/ St_Johns (UTC-03: 30) и Азия / Катманду (UTC + 05: 45), и эти пользователи не будут получать никаких писем, если вы запускаете cron только ежечасно.Таким образом, вы можете запускать cron каждые четверть часа, просто чтобы быть в безопасности.
Но поскольку задания cron часто начинаются через несколько секунд после , запланированного для запуска, выне следует проверять на равенство с 06:00:00.Кроме того, у часовых поясов нет с шагом в четверть часа (но, к счастью, все общепризнанные зоны есть), поэтому, чтобы быть педантичным, вы можете оценить, находится ли текущее время в пределах определенногоwindow.
Если, например, вы запускаете свой cron каждые 15 минут, увеличьте это окно на 15 минут ( например, 05:55 до 06:10), чтобы убедиться, чтопоймать крайние случаи.Все еще есть теоретический шанс, что запуск cron может быть пропущен ... но без сохранения дополнительных данных, которые указывают, было ли кому-то отправлено сегодняшнее электронное письмо (и не составляет ли это разницу, если они этого не сделали), это лучшее из того, что выможно сделать.