Jquery每日计时器失败

Jquery每日计时器失败,jquery,timer,Jquery,Timer,我使用这个jQuery代码在本地显示左至上午10点 在上午10点到下午14点之间,它会删除一些图像 然后在14:00之后,它应该显示剩余时间,直到上午10点。它还为周末增加了一个补偿 它在大多数时间都工作得非常出色,但14:00之后,它似乎会随着时间的推移而变化 有人知道为什么失败了吗,我已经看了很久了。。。现在我只是糊涂了!请帮忙 $(document).ready(function() { // 24 hour based var targetTime = 1000; var targetH

我使用这个jQuery代码在本地显示左至上午10点

在上午10点到下午14点之间,它会删除一些图像

然后在14:00之后,它应该显示剩余时间,直到上午10点。它还为周末增加了一个补偿

它在大多数时间都工作得非常出色,但14:00之后,它似乎会随着时间的推移而变化

有人知道为什么失败了吗,我已经看了很久了。。。现在我只是糊涂了!请帮忙

$(document).ready(function() {
// 24 hour based
var targetTime = 1000;
var targetHour = 10;
var openingTime = 1400;
var openingHour = 14;

var currentTime = new Date();

// sun 0 mon 1 ... fri 5 sat 6
var currentDay = currentTime.getDay();

var offset = 24;
// friday
if (currentDay === 5) {
    offset = 60;
} // saturday
else if (currentDay === 6) {
    offset = 48;
}

var the_current_time = ''+ currentTime.getHours() + '' + currentTime.getMinutes() + '';



if( the_current_time > targetTime && the_current_time < openingTime ) {

    var time_hours = (openingHour + offset) - currentTime.getHours() - 1;
    var time_min = 60 - currentTime.getMinutes();
    var time_seconds = 60 - currentTime.getSeconds();

    $('#hours_left').append(time_hours, ':',time_min < 10 ? "0" : "" , time_min , ':' , time_seconds < 10 ? "0" : "" , time_seconds);
    $('#watch_image').attr('src','http://cdn.shopify.com/s/files/1/0085/1702/t/1/assets/closed-until-icon.png');
    $('#time-left-banner').css('width','275px');
    $('.add-to-button').css('display','none');
    $('#purchase').css('display','none');


}
else if( the_current_time > targetTime && the_current_time > openingTime ) {

     var time_hours = (targetHour + offset) - currentTime.getHours() - 1;
     var time_min = 60 - currentTime.getMinutes();
     var time_seconds = 60 - currentTime.getSeconds();

    $('#hours_left').append(time_hours, ':',time_min < 10 ? "0" : "" , time_min , ':' , time_seconds < 10 ? "0" : "" , time_seconds);

}

else {
 var time_hours = (targetHour + offset) - currentTime.getHours() - 1;
 var time_min = 60 - currentTime.getMinutes();
 var time_seconds = 60 - currentTime.getSeconds();

 $('#hours_left').append(time_hours, ':',time_min < 10 ? "0" : "" , time_min , ':' , time_seconds < 10 ? "0" : "" , time_seconds);  
}
$(文档).ready(函数(){
//24小时制
var targetTime=1000;
var targetHour=10;
var openingTime=1400;
var openingHour=14;
var currentTime=新日期();
//周日0周一1…周五5周六6
var currentDay=currentTime.getDay();
var偏移=24;
//星期五
如果(当前日期===5){
偏移量=60;
}//星期六
否则如果(当前日期===6){
偏移量=48;
}
变量当前时间=“”+currentTime.getHours()+“”+currentTime.getMinutes()+“”;
if(当前时间>目标时间和当前时间<打开时间){
var time_hours=(openingHour+offset)-currentTime.getHours()-1;
var time_min=60-currentTime.getMinutes();
var time_seconds=60-currentTime.getSeconds();
$('hours'u left')。追加(time'u hours',:',time'min<10?“0:”,time'min',:',time'u seconds<10?“0:”,time'u seconds);
$('watch#u image').attr('src','http://cdn.shopify.com/s/files/1/0085/1702/t/1/assets/closed-until-icon.png');
$('time left banner').css('width','275px');
$('.add to button').css('display','none');
$('purchase').css('display','none');
}
else if(当前时间>目标时间(&U当前时间>打开时间){
var time_hours=(targetour+offset)-currentTime.getHours()-1;
var time_min=60-currentTime.getMinutes();
var time_seconds=60-currentTime.getSeconds();
$('hours'u left')。追加(time'u hours',:',time'min<10?“0:”,time'min',:',time'u seconds<10?“0:”,time'u seconds);
}
否则{
var time_hours=(targetour+offset)-currentTime.getHours()-1;
var time_min=60-currentTime.getMinutes();
var time_seconds=60-currentTime.getSeconds();
$('hours'u left')。追加(time'u hours',:',time'min<10?“0:”,time'min',:',time'u seconds<10?“0:”,time'u seconds);
}

}))

首先,我将代码简化一点。所有三个分支中的三个
var
计算似乎是相同的。更新剩余的
小时数也是如此。如果
,您应该能够将它们从
中排除。这也将把if分支的数量从3个减少到1个——如果我没有遗漏什么的话

至于这个问题,我会看一下当前的时间。你不是零填充分钟,所以10:05将变成105,或1:05。我看不出这将如何导致任何戏剧性的结果,因为计算不依赖于此值,但它将改变您将采用的if分支



啊,我错过了
if
的第一个分支中的
时间\u小时
计算差异。它使用
营业时间
而不是
目标营业时间
。这就解释了为什么坏的
当前时间将对报告值产生影响。

非常感谢您的回复vhallac,我不需要它来计算重新打开之前的时间吗?您可以放心地忽略我关于重构的评论。我提到了它,因为您可以将函数缩减10-15行,代码行越少隐藏的bug就越少。您只需将当前时间中的分钟数归零(或将其计算为
小时*100+分钟)。