Jquery倒计时到下周三晚上11点

时间:2014-02-25 03:09:40

标签: javascript jquery date countdowntimer

我需要编写一个在UTC时间内使用javascript日期对象的函数。它需要找到距离给定日期和下一个(或即将到来的)星期三晚上11点的差异,然后将其放入倒计时对象。一旦计时器达到0,我需要它再次重启。我知道我必须以某种方式使用getDay()函数,但我不确定如何解决这个问题。

1 个答案:

答案 0 :(得分:2)

逻辑和代码

  • 倒数计时器本身不需要jQuery。日期对象是普通的JavaScript的一部分。

  • 对于UTC,您需要使用getUTCDay()方法。

  • 假设givenDateDate个对象,以下内容将计算到即将到来的星期三(第3天)的天数。

    var daysUntilTarget = (3 - givenDate.getUTCDay() + 7) % 7;
    
  • 如果给定日期是星期三,则上述内容将返回0,您需要确定目标时间是否已过。你可以使用这样的东西:

    var daysUntilTarget,
        targetDay = 3,
        targetHour = 23,
        targetMinute = 0,
        targetSecond = 0;
    
    if (
        targetDay == givenDate.getUTCDay() &&
        targetHour * 3600 +
        targetMinute * 60 +
        targetSecond * 1 <
        givenDate.getUTCHours() * 3600 +
        givenDate.getUTCMinutes() * 60 +
        givenDate.getUTCSeconds() * 1 +
        givenDate.getUTCMilliseconds() / 1000
    ) {
        //given date is after target time on target day 
        daysUntilTarget = 7;
    }
    
  • 使用setUTCDate()setUTCHours方法设置目标日期和时间。

    var targetDate = new Date(givenDate);
    targetDate.setUTCDate(givenDate.getUTCDate() + daysUntilTarget);
    targetDate.setUTCHours(targetHour, targetMinute, targetSecond);
    
  • 使用getTime()方法获取给定日期和目标日期的时间戳。然后你可以计算出它们之间的差值并除以1000得到秒数。

    var countdownSeconds = (targetDate.getTime() - givenDate.getTime()) / 1000;
    
  • 以下内容会将总秒数转换为天数,分钟数和秒数。然后,您可以将这些内容写入HTML中的元素。

    var daysLeft, hoursLeft, minutesLeft, secondsLeft;
    
    secondsLeft = parseInt(countdownSeconds);
    
    daysLeft = parseInt(secondsLeft / 86400);
    secondsLeft = secondsLeft % 86400;
    
    hoursLeft = parseInt(secondsLeft / 3600);
    secondsLeft = secondsLeft % 3600;
    
    minutesLeft = parseInt(secondsLeft / 60);
    secondsLeft = parseInt(secondsLeft % 60);
    
  • 在使用它进行进一步计算之前,请务必将countdownSeconds转换为整数。否则,由于浮点数学运算,您可能会得到不希望的结果。例如,

    0.009 / 86400 = 1.0416666666666665e-7;
    parseInt(1.0416666666666665e-7) = 1;
    parseInt(0.009 / 86400) = 1; //probably not what you were expecting
    

倒数计时器

要更新计时器,您可以减少计数器或使用客户端计算机的时钟来保持时间。

  • 计数器方法不如时钟方法准确,因为前者没有考虑代码运行所需的时间。我注意到半小时内损失了3秒钟。调整循环间隔不会解决这个问题,因为不同的浏览器以不同的速度运行代码。由于其他原因,例如机器内存不足,代码可能会运行得较慢。

  • 客户端计算机的开发时间可能不准确。但是,可以将服务器时间与客户端时间进行初始比较以计算偏移量。然后客户端时间可以用作计数器而不是绝对值。退回是如果客户时间改变,它将影响倒计时。请注意,夏令时所引起的时区更改和更改不会影响倒计时,因为它们不会影响时间戳。

实施例

我使用上述代码创建了两个小提琴。