12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- <?php
- $this->registerJs(
- <<<JS
- const deadline = new Date(2023, 11, 31, 23, 59, 59);
- // id таймера
- let timerId = null;
- // склонение числительных
- function declensionNum(num, words) {
- return words[(num % 100 > 4 && num % 100 < 20) ? 2 : [2, 0, 1, 1, 1, 2][(num % 10 < 5) ? num % 10 : 5]];
- }
- // вычисляем разницу дат и устанавливаем оставшееся времени в качестве содержимого элементов
- function countdownTimer() {
- const diff = deadline - new Date();
- if (diff <= 0) {
- clearInterval(timerId);
- }
- const days = diff > 0 ? Math.floor(diff / 1000 / 60 / 60 / 24) : 0;
- const hours = diff > 0 ? Math.floor(diff / 1000 / 60 / 60) % 24 : 0;
- const minutes = diff > 0 ? Math.floor(diff / 1000 / 60) % 60 : 0;
- const seconds = diff > 0 ? Math.floor(diff / 1000) % 60 : 0;
- _days.dataset.title = declensionNum(days, ['день', 'дня', 'дней']);
- _hours.dataset.title = declensionNum(hours, ['час', 'часа', 'часов']);
- _minutes.dataset.title = declensionNum(minutes, ['минута', 'минуты', 'минут']);
- // _seconds.dataset.title = declensionNum(seconds, ['секунда', 'секунды', 'секунд']);
- _days.textContent = days + ' ' + _days.dataset.title;
- _hours.textContent = hours + ' ' + _hours.dataset.title;
- _minutes.textContent = minutes + ' ' + _minutes.dataset.title;
- // _seconds.textContent = seconds < 10 ? '0' + seconds : seconds;
- // _seconds.textContent = _seconds.textContent + ' ' + _seconds.dataset.title;
- }
- // получаем элементы, содержащие компоненты даты
- const _days = document.querySelector('.timer__days');
- const _hours = document.querySelector('.timer__hours');
- const _minutes = document.querySelector('.timer__minutes');
- const _seconds = document.querySelector('.timer__seconds');
- // вызываем функцию countdownTimer
- countdownTimer();
- // вызываем функцию countdownTimer каждую секунду
- timerId = setInterval(countdownTimer, 1000);
- JS
- ,
- yii\web\View::POS_END,
- 'counter'
- );
|