世界时钟没有滴答作响

时间:2012-08-22 11:03:23

标签: javascript html timezone settimeout

我正在尝试使用以下JavaScript代码创建世界时钟。 时钟显示在屏幕上,但它没有滴答作响。我的目标是在同一屏幕中为不同时区添加时钟。我可以添加几个时钟,但它们没有滴答作响。

    <script language="javascript">

    var timerRunning = false;
    var timezone = "Greenwich Mean Time";  // what time zone are you in ?
    var adjust = 0;

    function timeCheck(diff) {

            if (timerRunning) {
                clearTimeout(updatetime);
                timerRunning = false; 
            }

            gmtOffset = eval(diff);

            var tdate_01 = new checkDateTime("zonetime");
            var tdate_02 = new checkDateTime("testt");
    }

    function checkDateTime(clckID) {

            var today = new Date();
            var year = today.getYear() + 1900;
            var month = today.getMonth()+1;
            var date = today.getDate();
            var day = today.getDay();
            var hour = today.getHours();
            var minute = today.getMinutes();
            var second = today.getSeconds();

            var lastSat = date - (day+1);
            while (lastSat < 32) lastSat+=7;
            if (lastSat > 31) lastSat+=-7;
            var firstSat = date - (day+1);
            while (firstSat > 0) firstSat+=-7;
            if (firstSat < 1) firstSat+=7;
            if ((((month == 4) && (date >= firstSat)) || month > 4) &&
            (month < 11 || ((month == 10) && day <= lastSat))) adjust += 60;
            yourOffset = (new Date()).getTimezoneOffset();
            yourOffset = yourOffset + adjust;

            var xx = navigator.appName
            var xy = navigator.appVersion;
            xy = xy.substring(0,1);
            if ((xy == 4) && (xx == "Netscape")) yourOffset = yourOffset+adjust;
            if ((((month == 4) && (date > 20)) || month > 4) && (month < 11 || ((month == 10) &&
            day < 30))) adjust -= 60;

            ourDifference = eval(gmtOffset - yourOffset);
            var half = eval(ourDifference % 60);
            ourDifference = Math.round(ourDifference / 60);
            hour = eval(hour - ourDifference);
            var m = new Array("",
            "Jan","Feb","Mar",
            "Apr","May","Jun",
            "Jul","Aug","Sept",
            "Oct","Nov","Dec");
            var leap = eval(year % 4);

            if ((half == -30) || (half == 30)) minute += 30;
            if (minute > 59) minute -= 60, hour++;
            if (minute < 0) minute += 60, hour--;
            if (hour > 23) hour -= 24, date += 1;
            if (((month == 4) || (month == 6) ||
            (month == 9) || (month == 11)) && (date==31)) date = 1, month ++;
            if (((month == 2) && (date > 28)) && (leap != 0)) date = 1, month ++;
            if ((month == 2) && (date > 29)) date = 1, month++;
            if (hour < 0) hour += 24, date --;
            if ((date == 32) && (month == 12)) month = m[1], date = 1, year++;
            if (date == 32) date = 1, month++;
            if ((date < 1) && (month == 1)) month= m[12], date = 31, year--;
            if (date < 1) date = 31, month --;
            if (((month == 4) || (month == 6) ||
            (month== 9) || (month == 11)) && (date == 31)) date = 30;
            if ((month == 2) && (date > 28)) date = 29;
            if (((month == 2) && (date > 28)) && (leap != 0)) date=28;

            for (i=1; i<13; i++) {
                    if (month == i) {
                        month = m[i]; break;
                }
            }

            var dateTime = hour;
            dateTime = ((dateTime < 10) ? "0":"") + dateTime;
            dateTime = "   " + dateTime;
            dateTime += ((minute < 10) ? ":0" : ":") + minute;
            dateTime += ((second < 10) ? ":0" : ":") + second;
            dateTime += (hour >= 12) ? " PM, " : " AM, ";
            dateTime += month + " " + date + ", " + year;

            var mainDiv = document.getElementById(clckID).innerHTML = dateTime;

            updatetime=setTimeout("checkDateTime()", 900);
            timerRunning = true;
    }

</script>

 <select onchange="timeCheck(this.value)" size="0" align="center">
                <option value="">SELECT --> COUNTRY</option>
                <option value="+480">Pacific</option> // Australia UTC offset value is 10
                <option value="+420">Central</option>
                <option value="+300">Estern</option>
                <option value="+600">Hawaii</option>
                <option value="+360">Mexico</option>
                <option value="-330">New Delhi</option>
                <option value="-480">HONG KONG</option>
                <option value="-540">TOKYO</option>
                <option value="+0">London</option>
        </select>

    <div id="zonetime"></div>
    <div id="testt"></div>

2 个答案:

答案 0 :(得分:1)

setTimeout您忘记了ID

updatetime=setTimeout(function(){checkDateTime(clckID);}, 900);

答案 1 :(得分:0)

设置超时时必须传递参数:

updatetime=setTimeout("checkDateTime(" + clckID + ")", 900);