Таймер на JS
Идея такова:
У меня на странице должно быть много таймеров обратного отсчёта. Php отдаёт timestamp для каждого поля. Нужно из полученного времени, вычесть время которое сейчас(это всё в секундах) и получившиеся секунды преобразовать в вольный формат. Например Осталось: 5 дней 7 часов 55 минут 35 секунд Вопрос в том, существует ли где ни будь скрипт или библиотека? Которая содержит функцию, в которую можно передать именно ТАЙМШТАМП, и что бы у неё были доступны геттеры(дней, часов, минут, секунд). Дальше я планирую просто через интервал декриминировать поле и всё. Добавлено: Уже утро, сижу никакой и бац, в голову алгоритм) var warTime = element.innerHTML; var nowTime = Math.round(new Date().getTime() / 1000); var day = Math.ceil((warTime - nowTime) / 86400); var dayRes = (warTime - nowTime) % 86400; var hour = Math.ceil(dayRes / 3600); var hourRes = dayRes % 3600; var minute = Math.ceil(hourRes / 60); var minuteRes = hourRes % 60; var second = Math.ceil(minuteRes / 60); element.innerHTML = 'Дней: ' + day + 'Часов:' + hour + 'Минут:' + minute + 'Секунд:' + second; Немного костыль, нужно несколько проверок, но всё равно пишите если Вы знаете метод получше) |
Написал вот такую функцию. Работает нормально, но хотелось бы уменьшить её объём
function updateTimer(warTime){ var nowTime = Math.round(new Date().getTime() / 1000); if(warTime < nowTime){ element.innerHTML = 'Голосование закончено.'; }else{ var day = Math.ceil((warTime - nowTime) / 86400); var dayRes = (warTime - nowTime) % 86400; if(day < 10) day = '0' + day; var hour = Math.ceil(dayRes / 3600); var hourRes = dayRes % 3600; if(hour < 10) hour = '0' + hour; var minute = Math.ceil(hourRes / 60); var minuteRes = hourRes % 60; if(minute < 10) minute = '0' + minute; var second = minuteRes; if(second < 10) second = '0' + second; element.innerHTML = 'Осталось: ' + day + declOfNum(day, [' День ', ' Дня ', ' Дней ']); element.innerHTML += hour + declOfNum(hour, [' Час ', ' Часа ', ' Часов ']); element.innerHTML += minute + declOfNum(minute, [' Минута ', ' Минуты ', ' Минут ']); element.innerHTML += second + declOfNum(second, [' Секунда ', ' Секунды ', ' Секунд ']); } warTime--; setTimeout(updateTimer, 1000); } function declOfNum(number, titles){ cases = [2, 0, 1, 1, 1, 2]; return titles[(number % 100 > 4 && number % 100 < 20) ? 2 : cases[(number % 10 < 5) ? number % 10 : 5]]; } |
Цитата:
Во первых я против отсутствия скобок у конструкции if, во вторых html собирать проще не +=, а element.innerHTML = [ 'строка html', 'ещё строка html' ].join(""); все var вынести вверх функции. |
Цитата:
var second = hourRes % 60; Я не проверяю правильность твоих вычислений, но зачем нужна minuteRes? |
Цитата:
|
Цитата:
Также я пришел к выводу что var по возможности должно быть одно, вверху. Хороший тон так сказать. Позволяет понять сразу общую картину. Во вторых, зачем оптимизировать функцию, которая использоваться второй раз никогда не будет? Прогони через компрессор и получишь укороченную версию. Цитата:
|
Цитата:
setTimeout(updateTimer, 1000); + таких счётчиков будет около 10. Это серьёзно повлияет на производительность |
10 таймеров по одной секунде никак не повлияют на производительность.
|
|
А как вы их прикрутили? Можно посмотреть html код?
|
Часовой пояс GMT +3, время: 07:53. |