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 に答える