У меня есть система, в которой пользователь может выбрать для определенного события запуск еженедельно, раз в две недели или ежемесячно.
Теперь еженедельно и ежемесячно все просто - у меня задание cron выполняется каждый день, и если кто-то устанавливает значение «еженедельно», я просто проверяю, является ли день понедельником. Если это ежемесячно, я проверяю, является ли день месяца 1.
Но раз в две недели это немного сложнее. Моей первой мыслью было проверить, не понедельник ли это, а затем проверить, прошло ли четное количество недель с начала года. Я не уверен на 100% в этом, но я уверен, что есть вероятность того, что, когда год переключится, у вас может быть 2 недели подряд, когда это срабатывает, или две недели подряд, когда это не происходит. триггер.
Моя другая идея, которая потенциально преодолевает это, состоит в том, чтобы проверить, было ли это четное количество недель с определенной даты в прошлом, скажем, с 1 января 2020 года.
Оба из этих логик c, на мой взгляд, потребовалось бы использовать Carbon для получения ->diffInDays()
, разделить его на 7, получить результат и проверить, является ли результат четным или нечетным. Я просто хотел проверить, является ли какая-либо из этих идей хорошим способом реализации «раз в две недели» или мне нужно подумать о чем-то другом.