JavaScript获取当前时间&倒数

时间:2014-10-27 21:06:44

标签: javascript timer

我使用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 );
}

2 个答案:

答案 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);