@DeniSidorenko

Можно ли на js сделать такой таймер?

Добрый день, есть вот такой таймер. Возможно ли на js сделать ? Я предполагаю как можно получить количество оставшихся дней. А вот количество с секундами и минутами вопрос все же
bk2a6M4oMuri-QHzQoNyVQt2DbebSvdkFZ8RMCHa
  • Вопрос задан
  • 143 просмотра
Решения вопроса 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
Получите число миллисекунд от текущего момента до времени «Ч»:
const che = new Date(2020, 0, 1);
const now = new Date();
let diff = Math.floor((che - now) / 1000); // в секундах


Теперь от общего к частному. Дни - часы - минуты - секунды.
Сначала число дней. В сутках 24 * 60 * 60 = 86400 секунд.
const days = Math.floor(diff / 86400);
// вычесть учтённые дни из остатка времени
diff -= days * 86400;


Далее так же с часами, минутами, остаток – секунды.

И, высший пилотаж, изменять подпись в заисимости от числа:
0 – дней – часов
1 – день – час
2 – дня  – часа

Например, такой функцией:
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] ];  
}

// применение:
declOfNum(days, ['день', 'дня', 'дней']); // массив из вариантов для 1, 2, 5
Ответ написан
Комментировать
NeiroNx
@NeiroNx
Программист
Если вы посчитаете выражение:
var d = (new Date())-(new Date(2019,8,19));
то что вы получите?
Вы получите число миллисекунд с начала дня.
Как миллисекуды перевести в минуты? Разделить на 1000.
Как секунды перевести в минуты? Разделить на 60.
Как найти количество минут и секунд в 130 секундах?
Минуты это целое от деления на 60 Math.floor(130/60)
Секунды это остаток от деления на 60 130%60
Получилось 2:10
let a = new Date(2019,8,19,0,0,0).valueOf();//1568836800000
let b = new Date(2019,8,19,1,23,45,678).valueOf();//1568841825678
let c =  Math.abs(a-b);//5025678
let millis = c%1000;//678
c=Math.floor(c/1000);//5025
let secs = c%60;//45
c=Math.floor(c/60);//83
let mins = c%60;//23
c=Math.floor(c/60);//1
let hours=c%24;//1
c=Math.floor(c/24);//0
let days = c;//0

Можно также через класс даты посчитать:
new Date((new Date(2019,8,19,1,23,45,678))-(new Date(2019,8,19,0,0,0))).toJSON().split("T")[1]
"01:23:45.678Z"

плюс в том что не надо париться с ведущими нулями, а минус в том что дни так не добыть - придется отдельно считать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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