结束时如何重新初始化计时器?

How to reinit timer when it end?

大家好!在我使用 this timer 的网站上,但我不明白结束时我需要做什么。当计时器结束时,它应该在接下来的 14 天内重新启动。 您可能会建议一些书籍,我可以在其中阅读有关我的问题的信息,或者只是在 js 中阅读 Date() 。 谢谢!

这个插件有一个 回调 选项,一旦你的定时器结束就会被调用:

$('#countdown').timeTo({
    timeTo: new Date(new Date('Sat Apr 25 2015 09:00:00 GMT+0200')),
    displayDays: 2,
    theme: "black",
    displayCaptions: true,
    fontSize: 48,
    captionSize: 14,
    // important part
    callback: function(){ 
      alert('Timer ended'); 
    }
});

当您想跟踪用户的过期时间时,可以使用 localStorage-API 来完成此操作。

启动过期计时器:

通过使用 localStorage.This 功能 returns 用户首次访问您网站的开始日期,创建一个功能来跟踪用户的到期日期。此日期用于确定用户是否已将过期时间延长 14 天,但进一步的详细信息如下:

function handleUserDate(expireInDays){

  var now = new Date();
  var startDate = localStorage.getItem('timerStartDate');

  // has user already visited your site?
  if(startDate){

    // is user'date expired?
    startDate = new Date(Number(startDate));
    var futureDate = new Date(startDate.getTime()+expireInDays*(1000*60*60*24));
    if(now.getTime() < futureDate.getTime()){ 
      console.log('in future');
      return startDate;
    }

  }
  console.log('in past');
  localStorage.setItem('timerStartDate', now.getTime());
  return now;

}

下一个函数用于激活计时器并将剩余的天数放入 timeTo 选项:

function startTimer(inDays){

   var now = new Date();
   var futureDate = new Date(now.getTime()+inDays*(1000*60*60*24));
   console.log(futureDate);

   $('#countdown').timeTo({
        timeTo: futureDate,
        displayDays: 2,
        theme: "black",
        displayCaptions: true,
        fontSize: 48,
        captionSize: 14,
        callback: function(){ 
          alert('Timer ended'); 
          var daysInFuture = 14;
          startTimer(daysInFuture);
        }
   });
}

计算开始日期和现在之间天数时差的函数:

function getTimeDiff(date, date2, diff){
    return Math.abs(date.getTime()-date2.getTime())/diff;
}

放在一起:

var expireinDays = 14;// 14 day max

var startDate = handleUserDate(expireinDays);
console.log(startDate);// returns date of the very first time or when already expired it returns current date
var now = new Date();
var dayInMill = 1000*60*60*24;

var dayDifference = getTimeDiff(startDate,now,dayInMill);
dayDifference = expireinDays - dayDifference; 
console.log(dayDifference); // days left

startTimer(dayDifference); // show timer