Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS倒数计时器故障排除_Javascript - Fatal编程技术网

Javascript JS倒数计时器故障排除

Javascript JS倒数计时器故障排除,javascript,Javascript,你可能会知道我是一个完全的JS新手,但我花了一天的时间来编写这段代码,以显示一个发货计时器,它是根据SO上的各种其他帖子编译而成的(谢谢!) 在我完成添加所需的所有功能之前,它似乎进展顺利,但现在它不起作用了。当您第一次运行代码段时,它工作正常,但一旦它勾选“day”值显示不正确(它应该显示“明天”,但它会切换到“今天”),并且计时器本身已停止倒计时 我不知道我的生活在哪里,我把它搞砸了,所以如果可能的话寻求一些帮助!提前谢谢 JSFiddle: (函数(){ var start=新日期();

你可能会知道我是一个完全的JS新手,但我花了一天的时间来编写这段代码,以显示一个发货计时器,它是根据SO上的各种其他帖子编译而成的(谢谢!)

在我完成添加所需的所有功能之前,它似乎进展顺利,但现在它不起作用了。当您第一次运行代码段时,它工作正常,但一旦它勾选“day”值显示不正确(它应该显示“明天”,但它会切换到“今天”),并且计时器本身已停止倒计时

我不知道我的生活在哪里,我把它搞砸了,所以如果可能的话寻求一些帮助!提前谢谢

JSFiddle:

(函数(){
var start=新日期();
开始设定小时数(14,0,0);
var maybePluralize=函数maybePluralize(计数,名词){
变量后缀=arguments.length=1&&day=1&&day=start | | day==7){
document.getElementById('ddate').innerHTML='tomory';
}如果(天==5&&now>=start | |天==6){
document.getElementById('ddate')。innerHTML='Monday';
}
如果(天==6 | |天==5&&now>start | |天==7&&now开始){//太晚了,就明天去吧
start.setDate(start.getDate()+1);
}
var剩余=(立即开始)/1000;
var hh=数学下限(剩余/60/60%60);
var mm=数学地板(剩余/60%60);
document.getElementById('countdown').innerHTML=“在下一个”+可能是复数形式(hh,'hour')+“+可能是复数形式(mm,'min')+””;
设置超时(勾号,1000);
}
}
document.addEventListener('DOMContentLoaded',勾选);

})()

如果需要每秒调用函数,则需要使用
setInterval
setTimeout
仅在指定的秒数后运行给定函数一次

我对你的小提琴做了一个小的编辑,让它每秒钟运行一次

至于“day”值不正确,我认为您需要检查您的
if
语句。我完全不理解你的商业逻辑

另请注意-周日由getDay中的“0”给出。我看到您使用的是
day==7
,因此您可能需要对此进行检查并进行必要的调整。我想你需要从当天所有的if声明中减去-1

(函数(){
var start=新日期();
var now=新日期();
var day=now.getDay();
开始设定小时数(14,0,0);
函数可以是复数(计数,名词){
变量后缀=arguments.length=1&&day=1&&day=start | | day==7){
document.getElementById('ddate').innerHTML='tomory';
}如果(天==5&&now>=start | |天==6){
document.getElementById('ddate')。innerHTML='Monday';
}
如果(天==6 | |天==5&&now>start | |天==7&&now开始){//太晚了,就明天去吧
start.setDate(start.getDate()+1);
}
var剩余=(立即开始)/1000;
var ss=数学下限(剩余为%60);
剩余=数学楼层(剩余/60);
var mm=剩余的%60;
剩余=数学楼层(剩余/60);
var hh=剩余的%60;
document.getElementById('countdown').innerHTML=“在下一个”+可能是复数形式(hh,'hour')+”+可能是复数形式(mm,'min')+“+”+”+可能是复数形式(ss,'sec')+”;
}
}
document.addEventListener('DOMContentLoaded',function(){
设置间隔(刻度,1000);
});
})();

发货订单
谢谢!我不知道星期天=0的事。我只需要每分钟调用一次函数,但为了调试,我降低了间隔。我一直在反复研究代码,似乎是if语句“if(now>start){start.setDate(start.getDate()+1);”在我学会JS之前,我已经删除了这个功能,现在似乎工作得很好-欢迎,也检查一下你的setInterval使用情况,你需要把它放在正确的位置哦,好的。这些都是特定于语言的东西,比如getDay。我建议你在使用新功能时检查MDN操作性/方法,并陷入困境。
(function() {
var start = new Date();
start.setHours(14, 0, 0);

var maybePluralize = function maybePluralize(count, noun) {
    var suffix = arguments.length <= 2 || arguments[2] === undefined ? 's' : arguments[2];
    return count + ' ' + noun + (count !== 1 ? suffix : '');
};

var now = new Date();
var day = now.getDay();

function tick() {

    if (day >= 1 && day <= 5 && now < start) {
        document.getElementById('ddate').innerHTML = 'today';
    } else if (day >= 1 && day <= 4 && now >= start || day == 7) {
        document.getElementById('ddate').innerHTML = 'tomorrow';
    } else if (day == 5 && now >= start || day == 6) {
        document.getElementById('ddate').innerHTML = 'Monday';
    }

    if (day == 6 || day == 5 && now > start || day == 7 && now < start) {
        document.getElementById('countdown').innerHTML = "now";
    } else {
        if (now > start) { // too late, go to tomorrow
            start.setDate(start.getDate() + 1);
        }
        var remain = (start - now) / 1000;
        var hh = Math.floor(remain / 60 / 60 % 60);
        var mm = Math.floor(remain / 60 % 60);
        document.getElementById('countdown').innerHTML = "in the next <strong>" + maybePluralize(hh, 'hour') + " " + maybePluralize(mm, 'min') + "</strong>";

        setTimeout(tick, 1000);
    }
}
document.addEventListener('DOMContentLoaded', tick);