我使用JavaScript来获取当前时间,我希望它从早上12点开始每2小时倒计时一次。
我目前的代码倒计时2小时并重置,但我希望它基于从早上12点开始的时间来完成。
我想要让我当前的代码在上午12点开始,而不是当有些人访问页面时,或者我需要以其他方式进行操作(对建议开放)。
非常感谢!
var startTime = new Date(),
expiryTime = new Date(),
hourElem = document.getElementById('js-hour'),
minuteElem = document.getElementById('js-minute'),
secondElem = document.getElementById('js-second');
// Set up expiry time
expiryTime.setHours( expiryTime.getHours() + 2 );
expiryTime.setMinutes( expiryTime.getMinutes() + 0 );
expiryTime.setSeconds( expiryTime.getSeconds() + 0 );
var diffInMs = expiryTime - startTime,
diffInSecs = Math.round( diffInMs / 1000 ),
amountOfHours = Math.floor( diffInSecs / 3600 ),
amountOfSeconds = diffInSecs - (amountOfHours * 3600),
amountOfMinutes = Math.floor( amountOfSeconds / 60 ),
amountOfSeconds = amountOfSeconds - ( amountOfMinutes * 60 );
// Set up the countdown timer for display
// Set up the hours
if( amountOfHours > 0 ) {
hourElem.innerHTML = (amountOfHours < 10)
? '0' + amountOfHours + ' : '
: amountOfHours + ' : ';
} else {
hourElem.innerHTML = '00 : ';
}
// Set up the minutes
if( amountOfMinutes > 0 ) {
minuteElem.innerHTML = ( amountOfMinutes < 10 )
? '0' + amountOfMinutes + ' : '
: amountOfMinutes + ' : ';
} else {
minuteElem.innerHTML = '00 : ';
}
// // Set up the seconds
if( amountOfSeconds > 0 ) {
secondElem.innerHTML = (amountOfSeconds < 10)
? '0' + amountOfSeconds
: amountOfSeconds;
} else {
secondElem.innerHTML = '00';
}
function countDown() {
var dateNow = new Date();
// If we're not at the end of the timer, continue the countdown
if( expiryTime > dateNow ) {
// References to current countdown values
var hours = parseInt(hourElem.innerHTML);
minutes = parseInt(minuteElem.innerHTML),
seconds = parseInt(secondElem.innerHTML);
// Update the hour if necessary
if( minutes == 0 && seconds == 0) {
if ( hours != 0) {
--hours;
hourElem.innerHTML = ( hours < 10 ) ? '0' + (hours) + ' : ' : (hours) + ' : ';
minuteElem.innerHTML = '59 : ';
secondElem.innerHTML = '59';
return;
}
else {
hourElem.innerHTML = '02 : ';
minuteElem.innerHTML = '00 : ';
secondElem.innerHTML = '00';
return;
}
}
// Update the minute if necessary
if( seconds == 0 ) {
if( minutes > 0 ) {
--minutes;
minuteElem.innerHTML = ( minutes > 10 ) ? minutes + ' : ' : '0' + minutes + ' : ';
} else {
minuteElem.innerHTML = '59' + ' : ';
}
return secondElem.innerHTML = '59';
} else {
--seconds;
secondElem.innerHTML = ( seconds < 10 ) ? '0' + seconds : seconds;
}
} else {
expiryTime.setHours( expiryTime.getHours() + 2 );
expiryTime.setMinutes( expiryTime.getMinutes() + 0 );
expiryTime.setSeconds( expiryTime.getSeconds() + 0 );
}
}
window.onload = function() {
// Begin the countdown!
countDownInterval = setInterval( countDown, 1000 );
}
答案 0 :(得分:0)
根据我的评论,您需要更改计时器的播种方式。
现在您将设置的时间从当前系统时间设置为2小时,而不是2小时的旋转计时器。
如果您计算了当前日期午夜的秒数,那么您就知道从何处开始播种。
2小时内有7200秒。如果您从午夜获取秒数并使用MOD来确定剩余部分,那么您将确定您在2小时内的距离。然后使用7200减去余数。
从那里,您可以计算倒计时到期前剩余的小时数,分钟数和秒数。
(*开始听起来像家庭作业所以我不会发布任何代码)
答案 1 :(得分:0)
好的,所以我想出了我的问题。我忘了Date.now()给出了某一天上午12点以来的日期。我把它拿到ms,转移到秒,拿出%7200的MOD并从中减去7200以使它倒计时。然后我做了一些舍入和简单的减法来得到小时分和秒。
var end = Date.now();
var div = (end / 1000);
var time = (div / 7200);
var timesince = (div % 7200);
var timebefore = (7200 - timesince);
var hours = Math.floor(timebefore / 3600);
var minutes = Math.floor(timebefore / 60 - hours * 60);
var seconds = Math.floor(timebefore - minutes * 60 - hours * 3600);
document.write(hours + ":" + minutes + ":" + seconds);