@Flappy1488
beginner developer

Как выполнять действие каждые 24 часа?

Нужно сделать так, чтобы после того как пользователь нажал на кнопку выполнилось действие(любое) и ему виден был таймер в формате (hh:mm:ss) /*отчет от 23:59:59 до 00:00:00*/
Чтобы после истечения таймера была возможность нажать на кнопку ещё раз.

Отмечу решением то, что поможет в задаче и будет лучшее по оптимизации.
  • Вопрос задан
  • 335 просмотров
Решения вопроса 1
usdglander
@usdglander
Yipee-ki-yay
Заводите таблицу в БД с двумя полями:
user_id - Идентификатор пользователя
last_button_click_at - Время последнего клика пользователя по кнопке
При клике на кнопку, в момент отправки запроса на сервер проверяете прошло ли с этого времени 24 часа. Если да, то проводите нужные действия и пишите в last_button_click_at текущее время. Если не прошло, то ничего не делаете (можете вернуть ошибку).
При формировании страницы для пользователя проверяете last_button_click_at на 24х часовой интервал и если времени прошло меньше - блокируете кнопку.
Таким образом, не надо заводить никаких кронов, не нужно танцевать с преобразованием времени клиента в серверное (часовые пояса и так далее). Даже если пользователь разблокирует кнопку или пошлёт запрос руками, серверная проверка заблокирует сами действия.

upd: Ну и начальное значение таймера на странице выставлять в соответствии с полем last_button_click_at. Думаю это понятно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
danial72
@danial72
flutter dart.
Лучше это сделать на клиенте. При нажатии нужно класть unix time + 24 часа строку в куки. При загрузке через js подключить какой нибудь таймер, временем конца считать то, что лежит в куках. Перед инициализацией плагина обратного отсчета проверять, не прошло ли время и есть ли оно вообще в куках.
Ответ написан
Stalker_RED
@Stalker_RED
Видимый счетчик придется делать на клиенте.

На сервере при этом задание можно добавить в cron или люболй другой планировщик задач.
Ответ написан
Комментировать
arutyunov
@arutyunov
Mooza.ru — Делаем сайты
В одном из проектов делал такое. Метку времени храните в БД, чтобы на клиент её отдать. На клиенте получаете метку времени из БД с помощью сокетов/аякса и отрисовываете счётчик.

При обновлении страницы алгоритм тот же — дёрнуть базу, отрисовать счётчик с той же меткой.

Ещё нужно продумать логику отрисовки кнопки, потому что момент "прошло 24 часа" можно поймать при повторном открытии страницы — кнопка должна показаться сразу, её нужно отрендерить либо на сервере, либо логику описать на клиенте. И отдельно логику отрисовки кнопки, если этот момент наступил без перезагрузки страницы.

Ещё нужно контекст задачи покопать: вдруг что-то может произойти, из-за чего метка времени может поменяться с 24 часов на 32 часа, например. В данном случае клиент должен регулярно проверять метку времени, чтобы показывать актуальный счётчик. Например, если речь идёт о какой-то подписке и вы бонусом продлили подписку на 8 часов для пользователя.
Ответ написан
Комментировать
Dan_Stanly
@Dan_Stanly
Не задавайте вопросы на которые не знаете ответов
Чтобы после истечения таймера была возможность нажать на кнопку ещё раз.

А это для какой логики?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы