Во-первых, вы хотите знать, как циклически проходить посты с течением времени. В качестве входных данных нам нужно как минимум 12 разных дней, чтобы мы могли использовать текущий день месяца или года. Если мы возьмем день года:
Carbon::now()->dayOfYear //e.g. int(137)
Теперь мы можем рассчитать его мод по количеству постов, которые всегда будут возвращать число от 0 до 11. Если мы добавим 1, у нас будет число от 1 до 12. E.g:
137 % 12 = 5 // 5 + 1 = 6
120 % 12 = 0 // 0 + 1 = 1
347 % 12 = 11 // 11 + 1 = 12
На данный момент мы знаем, какой пост нам нужно отображать каждый день, но мы не контролируем время, в которое он должен отображаться.
Чтобы это исправить, одним из способов было бы учесть изменение дней в то время, когда вы хотите, чтобы посты менялись, выравнивание обоих облегчает задачу. Поскольку мы не хотим смещать часовой пояс сервера, мы можем просто сместить дату, которую мы выбрали, на 10 часов, что означает, что новый день начнется, как только текущий день достигнет 10 часов утра.
Carbon::now()->subHours(10)->dayOfYear
Теперь мы можем использовать полученное значение мода для создания необходимого запроса для отображения сообщения.