0

早上好,我创建了一个函数,它获取所有美国时区时间并将它们返回给我,突出显示您所在的时区。问题是我希望它每分钟运行一次。当我使用 setInterval 函数时,我不断收到一个 javascript 错误,提示“参数无效”。这是我在 jsFiddle http://jsfiddle.net/Qg2eL/中的代码

// Timezone
var arrTime = new Array();
var arrZone = new Array("ET","CT","MT","PT");

var getTimeZones = setInterval(timeZone(),60000);

function timeZone(){
    var location = 0;
    var current_date = new Date();
    var offset = parseInt(-current_date.getTimezoneOffset() / 60);

    switch(offset){
        case -5:
            location = 0;
            break;
        case -6:
            location = 1;
            break;
        case -7:
            location = 2;
            break;
        case -8:
            location = 3;
            break;
    }

    arrTime.length = 0;
    for(var x=5; x<9; x++){
        var current_date = new Date();
        var utc_hour = current_date.getUTCHours() - x;
        var utc_minutes = current_date.getUTCMinutes().toString();

        var dd = "AM";
        if(utc_hour >= 12){
            utc_hour = utc_hour - 12;
            dd = "PM";
        }
        if(utc_hour == 0){ utc_hour = 12; }
        utc_minutes = utc_minutes<10?"0"+utc_minutes:utc_minutes;

        var formattedTime = utc_hour+":"+utc_minutes+" "+dd;

        arrTime.push(formattedTime);
    }

    var strHTML = "";
    strHTML += "<ul>";
    for(var x=0; x<arrTime.length; x++){
        strHTML += "<li>"+arrZone[x]+": "+arrTime[x]+"</li>";
    }
    strHTML += "</ul>";

    $('.timezoneHolder').html(strHTML);
    $('.timezoneHolder ul li:nth-child('+(location+1)+')').css({
        "color":"lime",
        "font-weight":"bold"
    });
}
4

3 回答 3

2

非常常见的错误是您没有传递要执行的函数,而是在这一行中实际调用它:

var getTimeZones = setInterval(timeZone(),60000);

相当:

var getTimeZones = setInterval(timeZone,60000);

PS。在 Chrome 和 IE 中测试。并且没有弹出无效的参数。

编辑:您在进行更改后没有看到它弹出的原因是因为它只会在 60 秒后执行,所以您应该在您之后调用该函数,setInterval然后每 60 秒执行一次。

var getTimeZones = setInterval(timeZone,60000);
timeZone();
于 2012-11-21T14:42:41.493 回答
2

setInterval 函数运行它自己的“回调”,你可以说。语法有点不对劲。试试这个:

var getTimeZones = setInterval(function() {
    timeZone();
},60000);

这个语法基本上说,每 60000 毫秒(或 60 秒)在间隔内执行一次函数。在这种情况下,setInterval 函数会调用您的函数。

希望这可以帮助。

于 2012-11-21T14:43:40.890 回答
1
var getTimeZones = setInterval(timeZone,60000);

去掉括号!:)

于 2012-11-21T14:42:45.370 回答