Timer 倒数计时器的计算

Timer 倒数计时器的计算,timer,countdown,Timer,Countdown,在本代码中如何计算日、小时和分钟的分子和分母,为什么在分子中计算模数 var countDownDate = new Date("Sep 5, 2018 15:37:25").getTime(); var x = setInterval(function() { var now = new Date().getTime(); var distance = countDownDate - now; var

在本代码中如何计算日、小时和分钟的分子和分母,为什么在分子中计算模数

    var countDownDate = new Date("Sep 5, 2018 15:37:25").getTime();

    var x = setInterval(function() {  
        var now = new Date().getTime();      
        var distance = countDownDate - now;      
        var days = Math.floor(distance / (1000 * 60 * 60 * 24));
        var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
        var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
        var seconds = Math.floor((distance % (1000 * 60)) / 1000);

        document.getElementById("demo").innerHTML = days + "d " + hours + "h " + minutes + "m " + seconds + "s ";

       if (distance < 0) {
          clearInterval(x);
          document.getElementById("demo").innerHTML = "EXPIRED";
       }

    }, 1000);
var countDownDate=新日期(“2018年9月5日15:37:25”).getTime();
var x=setInterval(函数(){
var now=new Date().getTime();
var距离=倒计时日期-现在;
变量天数=数学楼层(距离/(1000*60*60*24));
可变小时数=数学楼层((距离%(1000*60*60*24))/(1000*60*60));
var分钟=数学楼层((距离%(1000*60*60))/(1000*60));
var秒=数学楼层((距离%(1000*60))/1000);
document.getElementById(“demo”).innerHTML=days+“d”+hours+“h”+minutes+“m”+seconds+“s”;
如果(距离<0){
净间隔(x);
document.getElementById(“demo”).innerHTML=“过期”;
}
}, 1000);

让我逐行解释一下:

var countDownDate = new Date("Sep 5, 2018 15:37:25").getTime();
在上面的一行中,您将获得日期2018年9月5日15:37:25的毫秒数,该日期从1970年1月1日开始(
getTime()

以上两行很简单。
现在
以毫秒为单位获取当前时间,
距离
是两个时间之间的差值(也以毫秒为单位)

一天中的总秒数是60*60*24,如果我们想得到毫秒数,我们需要将其乘以1000,因此1000*60*60*24是一天中的总毫秒数。除以差值(距离)通过这个数字并丢弃小数点后的值,我们得到天数

var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
由于有两个运算,上面的一行有点诡计。第一个运算(%)基本上用于丢弃表示天数的差额部分(%)返回除法的剩余部分,因此减去差额的
days
部分。 在下一步(除法)中,1000*60*60是一小时内的总毫秒数。因此,将差值的剩余部分除以该数字将得到
小时数(就像我们丢弃小数点后的数字之前一样)

这与计算
hours
的方式类似。第一个操作(%)从差值中取出
hours
部分,除法(1000*60)返回
minutes
(因为1000*60
minute
中的毫秒数)

这里,第一个操作(%)取出分钟部分,第二个操作(除法)返回秒数

注意:您可能已经注意到,在每个操作中都使用了原始距离,但代码仍然可以正常工作。让我给您举个例子(我使用的是差异而不是距离,因为这个名称更有意义)


让我逐行解释一下:

var countDownDate = new Date("Sep 5, 2018 15:37:25").getTime();
在上面的一行中,您将获得日期2018年9月5日15:37:25的毫秒数,该日期从1970年1月1日开始(
getTime()

以上两行很简单。
现在
以毫秒为单位获取当前时间,
距离
是两个时间之间的差值(也以毫秒为单位)

一天中的总秒数是60*60*24,如果我们想得到毫秒数,我们需要将其乘以1000,因此1000*60*60*24是一天中的总毫秒数。除以差值(距离)通过这个数字并丢弃小数点后的值,我们得到天数

var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
由于有两个运算,上面的一行有点诡计。第一个运算(%)基本上用于丢弃表示天数的差额部分(%)返回除法的剩余部分,因此减去差额的
days
部分。 在下一步(除法)中,1000*60*60是一小时内的总毫秒数。因此,将差值的剩余部分除以该数字将得到
小时数(就像我们丢弃小数点后的数字之前一样)

这与计算
hours
的方式类似。第一个操作(%)从差值中取出
hours
部分,除法(1000*60)返回
minutes
(因为1000*60
minute
中的毫秒数)

这里,第一个操作(%)取出分钟部分,第二个操作(除法)返回秒数

注意:您可能已经注意到,在每个操作中都使用了原始距离,但代码仍然可以正常工作。让我给您举个例子(我使用的是差异而不是距离,因为这个名称更有意义)


谢谢,很好的解释!很高兴我能帮忙:)谢谢,很好的解释!很高兴我能帮忙:)
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
difference = 93234543
days =  Math.floor(89234543 / (1000 * 60 * 60 * 24)) 
=> days = 1
hours = Math.floor((89234543 % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
(result of modulus operation is 6834543, and division is )
=> hours = 1

This is a very important operation to understand:
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));

distance(difference) / (1000 * 60 * 60) returns 25 (hours). As you can see we have already got 1 day and 1 hour (25 hours) so distance % (1000 * 60 * 60) wipes out all of these 25 hours and then the division calculates the minutes and so on.