Javascript 如何创建在特定时间重置的倒计时

Javascript 如何创建在特定时间重置的倒计时,javascript,datetime,time,timer,Javascript,Datetime,Time,Timer,首先,我要说的是,我对javascript没有深入的理解,但我知道如何用自己的方式为页面编写小脚本。我的一个客户需要我为网站做以下工作: 在用户的计算机上查找用户的本地时间 把当地时间从下午6点减去 以倒计时的形式显示该时间,或者只显示一条语句,让用户知道当天还有多少时间发货 下午6点后,时间重置或消失,直到下一个工作日 到目前为止,我已经能够创建从本地计算机获取时间的逻辑。我想我可以使用datejs,但它不计算一天中的小时数 以下是我的当前代码: var currentTime = new D

首先,我要说的是,我对javascript没有深入的理解,但我知道如何用自己的方式为页面编写小脚本。我的一个客户需要我为网站做以下工作:

  • 在用户的计算机上查找用户的本地时间
  • 把当地时间从下午6点减去
  • 以倒计时的形式显示该时间,或者只显示一条语句,让用户知道当天还有多少时间发货
  • 下午6点后,时间重置或消失,直到下一个工作日
  • 到目前为止,我已经能够创建从本地计算机获取时间的逻辑。我想我可以使用datejs,但它不计算一天中的小时数

    以下是我的当前代码:

    var currentTime = new Date()
    var hours = currentTime.getHours()
    var minutes = currentTime.getMinutes()
    
    var suffix = "AM";
    if (hours >= 12) 
    {
      suffix = "PM";
      hours = hours - 12;
     }
    
    var suffix = "AM";
    
    if (hours >= 12) 
    {
      suffix = "PM"; 
      hours = hours - 12;
    }
    
    if (hours == 0) 
    {
      hours = 12;
    }
    
    if (minutes < 10)
      minutes = "0" + minutes;
    
    document.write("<b>" + hours + ":" + minutes + " " + suffix + "</b>");
    
    var currentTime=新日期()
    var hours=currentTime.getHours()
    var minutes=currentTime.getMinutes()
    var suffix=“AM”;
    如果(小时数>=12)
    {
    后缀=“PM”;
    小时=小时-12;
    }
    var suffix=“AM”;
    如果(小时数>=12)
    {
    后缀=“PM”;
    小时=小时-12;
    }
    如果(小时==0)
    {
    小时=12;
    }
    如果(分钟<10)
    分钟=“0”+分钟;
    文件。写(“+hours+”:“+minutes+”+后缀+”);
    
    这个怎么样:

    var currentTime = new Date()
    var hours = currentTime.getHours()
    var minutes = currentTime.getMinutes()
    
    var suffix = "AM";
    if (hours >= 12) {
    suffix = "PM";
    hours = hours - 12;
      }
    
    
    if (minutes < 10)
    minutes = "0" + minutes
    
    if (suffix == "PM" && hours >= 6)
        {
     document.write("You're too late for next day shipping!");
    }
        else
        {
        var hoursLeft = 5 - hours;
    var minsLeft = 60 - minutes;
        document.write("<b> You've got " + hoursLeft  + " hours and " + minsLeft + " minutes left to qualify for next day shipping! </b>")
        }
    
    var currentTime=新日期()
    var hours=currentTime.getHours()
    var minutes=currentTime.getMinutes()
    var suffix=“AM”;
    如果(小时数>=12){
    后缀=“PM”;
    小时=小时-12;
    }
    如果(分钟<10)
    分钟数=“0”+分钟数
    如果(后缀==“PM”&&hours>=6)
    {
    文档。写下(“你来不及第二天发货了!”);
    }
    其他的
    {
    var hoursLeft=5小时;
    var minsLeft=60分钟;
    文档。写下(“您还有“+hoursleet+”小时和“+minsleet+”分钟的时间来满足第二天发货的条件!”)
    }
    
    如果这个网站允许我对其他人的答案发表评论,我会把这归功于乔瓦尼,但由于我还不能对其他人的工作发表评论,以下是需要改变的地方

    var currentTime = new Date()
    var hours = currentTime.getHours()
    var minutes = currentTime.getMinutes()
    
    var suffix = "AM";
    
    if (minutes < 10)
    minutes = "0" + minutes
    
    if (hours >= 18)
    {
     document.write("You're too late for next day shipping!");
    }
    else
    {
    var hoursLeft = 17 - hours;
    var minsLeft = 60 - minutes;
    if(minsLeft==60){
        minsLeft=0;
        hoursLeft++;
    }
    
    document.write("<b> You've got " + hoursLeft  + " and " + minsLeft + " minutes left to qualify for next day shipping! </b>")
    }
    
    var currentTime=新日期()
    var hours=currentTime.getHours()
    var minutes=currentTime.getMinutes()
    var suffix=“AM”;
    如果(分钟<10)
    分钟数=“0”+分钟数
    如果(小时数>=18)
    {
    文档。写下(“你来不及第二天发货了!”);
    }
    其他的
    {
    var hoursLeft=17小时;
    var minsLeft=60分钟;
    如果(分钟左==60){
    最小左=0;
    hoursLeft++;
    }
    文档。写下(“您还有“+hoursleet+”和“+minsleet+”分钟的时间可以进行第二天的发货!”)
    }
    
    原因是,上午5点订购的人可能会认为他们必须在下一个小时内提交,以便第二天发货,而实际上他们还有13个小时

    编辑:看到了您的时区问题,这篇文章可能会引起您的兴趣


    编辑2:发布了错误的链接。正确的答案现在应该已经出来了,尽管它可能有点过时。

    我昨天也解决了类似的问题,所以这很容易。以下是javascript代码:

    功能启动加载(最后一小时){
    var timeout_message=document.getElementById('timeout_message');
    var currentTime=新日期();
    var hours=currentTime.getHours();
    var minutes=currentTime.getMinutes();
    var seconds=currentTime.getSeconds();
    var expire\u time=0;//以秒为单位
    如果(小时0){
    小时=数学楼层(剩余/3600);
    分钟=数学楼层((剩余-小时*3600)/60);
    秒=剩余的%60;
    timeout_message.innerHTML='倒计时将在'+hours+'hours'+minutes+'min.+seconds+'sec'后停止';
    setTimeout(倒计时会话超时,1000);
    }否则{
    timeout_message.innerHTML=‘时间到了!’;
    }
    }
    倒计时会话超时();
    }
    

    完整脚本@在这里。

    这是一个简单的倒计时计时器,从函数运行后30秒开始,到0秒结束。达到0后,它会自动重置计数器。它又回到30秒,这个过程在一个循环中继续

    window.onload=function(){startCountDown(30, 1000,myFunction);} 函数startCountDown(i,p,f){var pause=p;var fn=f; var countDownObj=document.getElementById(“倒计时”); countDownObj.count=函数(i){ //写出计数 countDownObj.innerHTML=i; 如果(i==0){ //执行函数 //fn(); 开始计数(301000,myFunction);//停止 return;}setTimeout(函数(){ //重复 倒计时对象计数(i-1); }, 暂停 );}//将其设置为倒计时obj.count(i);} 函数myFunction(){};
    
    

    这假设客户在同一时区,这不是一个安全的假设。如何处理javascript中的时区偏移。。。我不确定。@Giovanni B:你必须得到客户的位置,然后选择正确的时区。太好了!非常感谢GiovanniBScott,我刚刚测试了你的代码,当我改变时间时,它工作了。再次感谢您和Giovanni的帮助。如果当前时间是
    新日期(2012,6,18,0,0,0,0)
    则输出显示
    您还有17到60分钟的时间,而不是18小时。@andyb编辑以解决此问题。谢谢。@NinaMorena我在if检查中犯了一个愚蠢的错误,只使用了
    =
    而不是
    =
    。它不应该再给那个问题了。不,我的信用,不!!!嘿,谢谢你修改了我的密码。我只是在没有彻底测试的情况下给出了一个几乎没有答案的答案。。。我真丢脸。好消息@Scottmalongs除了您正在进行的任何其他测试外,请记住测试夏令时日期,否则,
    x小时
    输出可能会超出+/-1小时 window.onload = function() { startCountDown(30, 1000, myFunction); } function startCountDown(i, p, f) { var pause = p; var fn = f; var countDownObj = document.getElementById("countDown"); countDownObj.count = function(i) { //write out count countDownObj.innerHTML = i; if (i == 0) { //execute function //fn(); startCountDown(30, 1000, myFunction); //stop return; } setTimeout(function() { // repeat countDownObj.count(i - 1); }, pause ); } //set it going countDownObj.count(i); } function myFunction(){};
        </script>