JS: простой счётчик дней от события
Понадобился небольшой "самообновляемый" и "самовызываемый" элемент, способный показывать, сколько дней прошло от даты (указанная дата считается первым днём). В принципе, всё делается как делалось раньше, только код современней и с проверкой ошибок.
Вот код в работе:
Switch on JS
...а ниже показан листинг файлом .html (без стандартного обрамления) в кодировке Юникода UTF-8. Из листинга видно, что весь скрипт является безымянной самовызываемой функцией-замыканием, и если аккуратно поменять аргументы вызова функции в последней строке кода, то можно получить другие счётчики.
<!DOCTYPE html> <meta charset="UTF-8"> <style> #info1 { font-size: 80%; color: red; } </style> <p id="info1">Switch on JS</p> <script> setInterval((function() { let id = arguments[0]; if (id === undefined) { console.log('Передайте id элемента в функцию'); return; } let elem = document.getElementById (id); if (!elem) { console.log('Элемент с id="'+id+'" не найден'); return; } if (arguments.length !== 5) { console.log('Передайте id, строку, день, месяц, год в функцию'); return; } let str = arguments[1], d = parseInt(arguments[2]), m = parseInt(arguments[3]), y = parseInt(arguments[4]); if (isNaN(y) || isNaN(m) || isNaN(d) || y<1582 || y>9999 || m<1 || m>12 || d<1 || d>31) { console.log('Передайте корректную дату в функцию'); return; } let startDate = new Date(y, m-1, d); let today = new Date(); let diffDays = Math.ceil((today - startDate) / (1000 * 60 * 60 * 24)); if (diffDays < 1) { console.log('Передайте дату раньше текущей в функцию'); return; } elem.innerText = str + ' ' + diffDays + ' ' + goodwordform(diffDays,'д','ень','ня','ней'); function goodwordform(k,w,o1,o2,o5) { if ( (k%100>10 && k%100<20) || k%10>4 || k%10==0) w+=o5; else if (k%10==1) w+=o1; else w+=o2; return w; } })('info1','"Спецоперация" продолжается',24,2,2022),60000); //Меняем аккуратно только аргументы из предыдущей строки: id элемента,'текст',день,месяц,год //Частота самообновления элемента - раз в минуту, 60000 мс = 60 сек </script>
12.03.2022, 18:49 [1416 просмотров]