Обратный отсчет jQuery / подсчет значений на стороне сервера
-
20-09-2019 - |
Вопрос
Сценарий: http://keith-wood.name/countdown.htm
Ежедневный ответ в формате json:
items: { fajr: '5:23 am', sharooq: '7:23 am', dhur: '1:34 pm', asr: '4:66 pm': magrib: '6:23 pm', isha: '8:01 pm'}
Когда сайт загружается, я делаю Ajax-запрос и получаю указанное выше время отклика.Это события, которые происходят ежедневно, с разным временем.Я хочу получить это время и отсчитать, сколько осталось минут, часов или секунд, и показать это, а как только секунды закончатся, то показать, сколько минут назад произошло это событие.Через 15 минут покажите обратный отсчет нового события.Вот как это будет выглядеть на дисплее:
dhur 2 hours left
dhur 2 minutes left (if no longer hours left)
dhur 55 seconds left (if no longer minutes left)
dhur 5 seconds ago (if count down finished and then show how many seconds ago)
dhur 9 minutes ago (if extended more then seconds, then show how many minutes ago)
asr 1 hour left (after 15 minutes later time changes to new event)
Если скрипт, который я использую, не подходит, и вы предпочитаете какой-то другой скрипт для такого рода задач, пожалуйста, поделитесь со мной.Это не обязательно должен быть скрипт jQuery, но это помогает, если это jQuery.
Решение
Я думаю, вам было бы лучше не переосмысливать эту штуку.
Уже существует действительно хороший плагин jQuery для этой функциональности (также с поддержкой i18n).
Timeago - это плагин jQuery, который упрощает автоматическую поддержку обновление нечетких временных меток (например"4 минуты назад" или "около 1 дня назад" или "через 2 года")
P.S.:не забудьте установить jQuery.timeago.settings.allowFuture = true;
чтобы разрешить даты в будущем
Если вам нужен какой-то "обратный вызов", вы могли бы сделать две вещи.
- Предполагая, что вы поддерживаете только английский (без i18n), просто используйте
setInterval
который каждые 20-25 секунд проверяет, является ли строка, установленная jQuery timeago, "15 минут назад", а затем делает все, что угодно ВзломатьАдаптируйте код плагина и подключитесь к, например,$timeago.inWords
метод и делайте все, что угодно, еслиdistanceMillis
параметр равен>=900000
(15*60*1000).