JSFiddle - React, Tailwind, and code Playground
HTML
<span id="regresive"></span>
CSS
* {
font-family: "Calibri";
font-size: 13px;
}
JavaScript
var today = function() { return getNowDate(-5); },
limit = setLimit(-5, 0, 21),
format = "%%D%% DĂas, %%H%% Horas, %%M%% Minutos, %%S%%.";
document.addEventListener("DOMContentLoaded", function() {
setInterval(update, 1000);
});
function getNowDate(UTC) {
var date = new Date(), secs = 0;
secs += (date.getUTCHours() + UTC) * 60 * 60;
secs += date.getMinutes() * 60;
secs += date.getSeconds();
return secs;
}
function setLimit(UTC, days, hours, minutes, seconds) {
var utchours = new Date().getUTCHours() + UTC, plusHours = 0;
if(utchours >= hours) {
hours = (24 + hours) % 24;
++days;
}
var secs = 0;
secs += seconds || 0;
secs += minutes * 60 || 0;
secs += hours * 60 * 60 || 0;
secs += days * 24 * 60 * 60 || 0;
return secs;
}
function update() {
var diff = limit - today(),
days = (diff / 24 / 60 / 60) % 7,
hours = (diff / 60 / 60) % 24,
minutes = (diff / 60) % 60,
seconds = (diff) % 60;
var elapsed = format.replace(/%%D%%/g, fixDigits(days, 1));
elapsed = elapsed.replace(/%%H%%/g, fixDigits(hours, 2));
elapsed = elapsed.replace(/%%M%%/g, fixDigits(minutes, 2));
elapsed = elapsed.replace(/%%S%%/g, fixDigits(seconds, 2));
document.getElementById("regresive").innerHTML = elapsed;
}
function fixDigits(num, digits) {
num = parseInt(num);
num = (isNaN(num))? 0 : num;
num = num.toString();
for(var i = 0; num.length < digits; ++i)
num = "0" + num;
return num;
}