我的时钟区坏了

时间:2013-06-26 19:15:11

标签: javascript timer clock zone

我的英语很差,所以我可以犯错误。

两天前我写了时钟区,但是工作很糟糕。向下看你可以看到我的代码。我需要你的建议。

<script>
        function Clock(time_zone) {
            var time    = new Date();
            var hours   = time.getUTCHours() + time_zone;
            var minutes = time.getUTCMinutes();
            var seconds = time.getUTCSeconds();
            var suffix  = "AM";
            var day = time.getDate();
            var month = time.getMonth();
            var year = time.getFullYear();
            var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");


            if (hours < 0) {
                hours += 24;
            }

            if (hours > 11) {
                suffix = "PM";
                hours -= 12;
            }

            if (hours == 0) {
                hours = 12;
            }

            if (hours < 10) {
                hours = "0" + hours;
            }

            if (minutes < 10) {
                minutes = "0" + minutes;
            }

            if (seconds < 10) {
                seconds = "0" + seconds;
            }

            var time_span = document.getElementById('time');
            var suffix_span = document.getElementById('suffix');
            var date_span = document.getElementById('date');
            time_span.innerHTML = hours + ":" + minutes + ":" + seconds;
            suffix_span.innerHTML = suffix;
            date_span.innerHTML = day + " " + months[month] + " " + year;

            setTimeout(function(){Clock(time_zone)}, 1000);
        }
        window.onload = function()
        {
            Clock(2);
        }
    </script>

这是更改区域的按钮。

<input type="button" onClick="Clock(5)" value="AMSTERDAM" name="AMSTERDAM"/>

当我点击此按钮时,我的时间在旧区域时间(时钟(2))和新区域时间(时钟(5))之间闪烁

你能告诉我怎么修理它吗?

感谢所有建议。

拜托,你会改善我的语言错误。

2 个答案:

答案 0 :(得分:2)

您需要取消原始超时

if(window.timer) window.clearTimeout(window.timer);
window.timer = setTimeout(function(){Clock(time_zone)}, 1000);

答案 1 :(得分:0)

因为你有两种时钟方法在运行

  1. 当您加载页面时,时钟(2)正在运行,并且它再次在setTimeOut中被调用。所以这是一个循环。

  2. 然后当您点击另一个时钟(5)以相同的方式运行时。

  3. 所以当你随时调用时钟方法时,你需要取消前一个。

    以下是fiddle

    var t;
    
     function Clock(time_zone) {
    
           clearTimeout(t);
           var time = new Date();
           var hours = time.getUTCHours() + time_zone;
           var minutes = time.getUTCMinutes();
           var seconds = time.getUTCSeconds();
           var suffix = "AM";
           var day = time.getDate();
           var month = time.getMonth();
           var year = time.getFullYear();
           var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
    
    
           if (hours < 0) {
               hours += 24;
           }
    
           if (hours > 11) {
               suffix = "PM";
               hours -= 12;
           }
    
           if (hours == 0) {
               hours = 12;
           }
    
           if (hours < 10) {
               hours = "0" + hours;
           }
    
           if (minutes < 10) {
               minutes = "0" + minutes;
           }
    
           if (seconds < 10) {
               seconds = "0" + seconds;
           }
    
           var time_span = document.getElementById('time');
           var suffix_span = document.getElementById('suffix');
           var date_span = document.getElementById('date');
           time_span.innerHTML = hours + ":" + minutes + ":" + seconds;
           suffix_span.innerHTML = suffix;
           date_span.innerHTML = day + " " + months[month] + " " + year;
    
          t =  setTimeout(function () {
               Clock(time_zone)
           }, 1000);
       }
    
       window.onload = function () {
           Clock(2);
       }