Javascript时钟为负

Javascript时钟为负,javascript,countdown,clock,Javascript,Countdown,Clock,我试图修复它,但失败了 函数ShowTime(){ var now=新日期(); var明天=新日期(); 明天.setDate(今天.getDate()+1); var hrs=17-now.getHours(); var mins=30-now.getMinutes(); var secs=60-now.getSeconds(); 如果(小时

我试图修复它,但失败了

函数ShowTime(){
var now=新日期();
var明天=新日期();
明天.setDate(今天.getDate()+1);
var hrs=17-now.getHours();
var mins=30-now.getMinutes();
var secs=60-now.getSeconds();
如果(小时<0){
var hrs=17-明天。getHours();
var mins=30-明天。getMinutes();
var secs=60-moother.getSeconds();
}
timeLeft=“”+小时+小时+分钟+分钟+秒+秒”;
$(“#倒计时”).html(timeLeft);
}
ShowTime();
var倒计时=设置间隔(显示时间,1000)

您需要调用
clearInterval(倒计时)当您要停止计时器时。按照间隔时间

WindowOrWorkerGlobalScope mixin的clearInterval()方法取消一个定时重复操作,该操作以前是通过调用setInterval()建立的


另外,我认为您提供的代码需要更改为
tomory.setDate(now.getDate()+1)而不是明天.setDate(今天.getDate()+1)

我从上一张便条中找到了这个,但在SO中找不到问题的链接

<font size=1><p id='demo'></font>

<script src="path/to/jquery.js"></script> 
<script>
    // Set the date we're counting down to
    //var insert1="<?php echo $insert1; ?>";
    //var timeout1="<?php echo $timeout1; ?>";
    var insert1="05/23/2017 00:00:00";
    var timeout1="05/25/2017 00:00:00";

    // Update the count down every 1 second
    var x = setInterval(function() {
        var countDownDate = new Date(timeout1).getTime();
        var countDownDates = new Date().getTime();
        // Get todays date and time

        // Find the distance between now an the count down date
        var distance = countDownDate - countDownDates;
        //var distance = countDownDates;

        // Time calculations for days, hours, minutes and seconds
        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);

        // Output the result in an element with id="demo"
        document.getElementById("demo").innerHTML = days + "d " + hours + "h "
        + minutes + "m " + seconds + "s ";

        // If the count down is over, write some text 
        if (distance < 0) {
            clearInterval(x);
            document.getElementById("demo").innerHTML = "Time out";
        }
    }, 1000);
</script>

//确定我们倒计时的日期 //var insert1=“”; //var timeout1=“”; var insert1=“2017年5月23日00:00:00”; var timeout1=“2017年5月25日00:00:00”; //每1秒更新一次倒计时 var x=setInterval(函数(){ var countDownDate=新日期(timeout1).getTime(); var countDownDates=new Date().getTime(); //获取今天的日期和时间 //找出现在和倒计时日期之间的距离 var距离=倒计时日期-倒计时日期; //var距离=倒计时日期; //天、小时、分钟和秒的时间计算 变量天数=数学楼层(距离/(1000*60*60*24)); 可变小时数=数学楼层((距离%(1000*60*60*24))/(1000*60*60)); var分钟=数学楼层((距离%(1000*60*60))/(1000*60)); var秒=数学楼层((距离%(1000*60))/1000); //在id=“demo”的元素中输出结果 document.getElementById(“demo”).innerHTML=days+d+hours+h +分钟+米+秒+秒; //如果倒计时结束,写一些文字 如果(距离<0){ 净间隔(x); document.getElementById(“demo”).innerHTML=“超时”; } }, 1000);


您将变量定义为now并查找today,因此它不显示倒计时

新的html如下所示

<div id="countdown"></div>
function ShowTime() {
var today= new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);
var hrs = 17-now.getHours();
var mins = 30-now.getMinutes();
var secs = 60-now.getSeconds();
if(hrs < 0) {
var hrs = 17-tomorrow.getHours();
var mins = 30-tomorrow.getMinutes();
var secs = 60-tomorrow.getSeconds();
}
  timeLeft = "" +hrs+' hours '+mins+' minutes '+secs+' seconds';
$("#countdown").html(timeLeft);
}

ShowTime();
var countdown = setInterval(ShowTime ,1000);

新的js如下所示

<div id="countdown"></div>
function ShowTime() {
var today= new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);
var hrs = 17-now.getHours();
var mins = 30-now.getMinutes();
var secs = 60-now.getSeconds();
if(hrs < 0) {
var hrs = 17-tomorrow.getHours();
var mins = 30-tomorrow.getMinutes();
var secs = 60-tomorrow.getSeconds();
}
  timeLeft = "" +hrs+' hours '+mins+' minutes '+secs+' seconds';
$("#countdown").html(timeLeft);
}

ShowTime();
var countdown = setInterval(ShowTime ,1000);
函数ShowTime(){
var today=新日期();
var明天=新日期();
明天.setDate(今天.getDate()+1);
var hrs=17 now.getHours();
var mins=30 now.getMinutes();
var secs=60 now.getSeconds();
如果(小时<0){
var hrs=17明天。getHours();
var mins=30明天。getMinutes();
var secs=60明天。getSeconds();
}
timeLeft=“”+小时+小时+分钟+分钟+秒+秒”;
$(“#倒计时”).html(timeLeft);
}
ShowTime();
var倒计时=设置间隔(显示时间,1000);

您的算术错误

每次时钟滴答作响时,都会生成一个新的日期。如果是18:00那么:

var hrs = 17 - now.getHours();
将变为负值,因此您将执行以下操作:

var hrs = 17 - tomorrow.getHours();
但这将产生-1。您要做的是为结束时间创建一个日期,然后从中减去当前日期,并将结果(毫秒)解析为小时、分钟和秒

我不知道分秒调整是为了什么,它们对我来说没有意义。下面对您的代码进行了一些小的调整:

函数ShowTime(){
var now=新日期();
var end=新日期(+现在);
var endHour=17;
结束设定小时(结束小时,0,0,0);
//如果过去的结束,定在明天
如果(现在>=结束){
end.setDate(end.getDate()+1);
}
log('倒计时到'+end.toString());
//获取差异并划分为小时、分钟、秒
var diff=结束-现在;
var-hrs=diff/3.6e6 | 0;
风险值分钟=(差异%3.6e6)/6e4 | 0;
var secs=(差异%6e4)/1000 | 0;
//格式化并写入文档
timeLeft=“”+小时+小时+分钟+分钟+秒+秒”;
document.getElementById('countdown')。innerHTML=timeLeft;
}
ShowTime();
var倒计时=设置间隔(显示时间,1000)

显示的代码根本不运行,因为当前未定义
变量。不管怎么说,如果你想倒计时到零并停在那里,那么你需要在这一点上调用
clearInterval()
。你还想完成什么?@nnnn-从代码上看,OP似乎不希望它停在零,而是希望“明天”开始倒计时到17:00(对分钟和秒进行一些不寻常的调整).但是,OP没有要求php。是的,我只是编辑以排除php,它的工作原理是一样的。。谢谢那些投票反对的人。。