我需要一个简单的倒数计时器,但确实令我感到烦恼的是,由于某种原因我似乎无法获得它,并且我认为这是因为我需要这样做的特殊方式,因此必须遵守以下规则:
例如,现在是世界标准时间07:22,那么距离下一个时间将是8分钟。
如果说的是07:30,则要等到下一个小时1个小时。
最后但并非最不重要的一点是,如果是07:31,则要等到下一个59分钟。
对于其他倒计时,我可以很轻松地做到这一点,但是这些都是针对小时型的事情,不是那么复杂...我只是度过了很长的时间,请帮帮我。
编辑添加示例代码
var d = new Date();
var hoursUntil = 2 - d.getUTCHours() % 3;
var minutesUntil = 60 - d.getUTCMinutes();
var timestr = "";
if (minutesUntil === 60) {
hoursUntil++;
minutesUntil = 0;
}
if (hoursUntil > 0) {
timestr += hoursUntil + " hour" + (hoursUntil > 1 ? "s" : "");
}
if (hoursUntil >= 1 && minutesUntil > 1) {
timestr += " and " + minutesUntil + " minute" + (minutesUntil > 1 ? "s" : "");
}
if (minutesUntil > 1 && hoursUntil < 1) {
timestr += minutesUntil + " minute" + (minutesUntil > 0 && minutesUntil < 2 ? "" : "s");
}
bot.sendMessage(msg, "Next event will be in " + timestr + ".");
让我们思考一下。我们想知道的是,下一次的分针显示为30时。如果我们只想每半小时知道一次,我们就可以像用进行除以30的除法运算d.getUTCHours() % 3
。
但是,我们希望每60分钟获得一次,因此我们有做somethingInMinutes % 60
。标记必须从60转换为0,因此只需增加30分钟即可。
要获得秒精度,请将其计算为秒,然后加上当前秒,然后减去60分钟(3600秒)。
我们想要一个每隔一秒触发一次的计时器。计算1000与毫秒的差。
<div>Seconds remaining until next 30 minutes mark: <span id="min-total"></span></div>
<div>minutes:seconds remaining: <span id="min-part"></span>:<span id="sec-part"></span></div>
<script>
var byId = document.getElementById.bind(document);
function updateTime()
{
var
time = new Date(),
// take 1800 seconds (30 minutes) and substract the remaining minutes and seconds
// 30 minutes mark is rest of (+30 divided by 60); *60 in seconds; substract both, mins & secs
secsRemaining = 3600 - (time.getUTCMinutes()+30)%60 * 60 - time.getUTCSeconds(),
// integer division
mins = Math.floor(secsRemaining / 60),
secs = secsRemaining % 60
;
byId('min-total').textContent = secsRemaining;
byId('min-part').textContent = mins;
byId('sec-part').textContent = secs;
// let's be sophisticated and get a fresh time object
// to calculate the next seconds shift of the clock
setTimeout( updateTime, 1000 - (new Date()).getUTCMilliseconds() );
}
updateTime();
</script>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句