0

コードjsFiddle: http: //jsfiddle.net/14rego/gEUJz/

これらの関数を使用して日付の配列を作成しています。どちらもWebkitブラウザーでうまく機能しますが、IEは日付についてより慎重です。

nextDayA()は、月に8月または9月が含まれていない限り、IEで機能します。nextDayB()を試す前に、何時間もかけてそれを理解しようとしました。これは、Date関数が含まれていないため、どこのブラウザーでも機能すると思いますが、IEではまったく機能しません。

それが機能する限り、どちらを使用してもかまいません。正しい日付を順番に取得する必要があります。私は少し経験がありますが、確かに教祖ではありません。誰かが光を当てることができますか?

$.nextDayA = function (year, month, day) {
    var jMo = parseInt(month) - 1;
    var today = new Date(year, jMo, day);
    var tomorrow = new Date(today.getTime() + (24 * 60 * 60 * 1000));
    var nextDy = tomorrow.getDate();
    var nextMo = tomorrow.getMonth() + 1;
    var nextYr = tomorrow.getFullYear();
    if (nextDy < 10) { nextDy = '0' + nextDy; }
    if (nextMo < 10) { nextMo = '0' + nextMo; }
    var tomDate = parseInt(nextYr + '' + nextMo + '' + nextDy);
    return tomDate;
};
$.nextDayB = function (year, month, day) {
    var thisYear = parseInt(year);
    var thisMonth = parseInt(month);
    var thisDay = parseInt(day);
    if (year % 4 == 0) {
        var leap = 'yes';
    } else {
        var leap = 'no';
    }
    var nextDy = thisDay + 1;
    if (nextDy > 28 && thisMonth === 2 && leap === 'no') {
        var nextDy = 1;
        var nextMo = thisMonth + 1;
    } else if (nextDy > 29 && thisMonth === 2 && leap === 'yes') {
        var nextDy = 1;
        var nextMo = thisMonth + 1;
    } else if (nextDy > 30 && (thisMonth === 2 || thisMonth === 4 || thisMonth === 6 || thisMonth === 9 || thisMonth === 11)) {
        var nextDy = 1;
        var nextMo = thisMonth + 1;
    } else if (nextDy > 31 && (thisMonth === 1 || thisMonth === 3 || thisMonth === 5 || thisMonth === 7 || thisMonth === 8 || thisMonth === 10 || thisMonth === 12)) {
        var nextDy = 1;
        var nextMo = thisMonth + 1;
    } else {
        var nextMo = thisMonth;
    }
    if (nextMo === 13) {
        var nextMo = 1;
        var nextYr = thisYear + 1;
    } else {
        var nextYr = thisYear;
    }

    if (nextDy < 10) {
        nextDy.toString();
        var strDy = '0' + nextDy;
    } else {
        var strDy = nextDy.toString();
    }
    if (nextMo < 10) {
        nextMo.toString();
        var strMo = '0' + nextMo;
    } else {
        var strMo = nextMo.toString();
    }

    var strYr = nextYr.toString();
    var strDate = strYr + '' + strMo + '' + strDy;
    var tomDate = parseInt(strDate);
    return tomDate;
};
4

1 に答える 1

3

基本パラメータをに渡す必要がありますparseInt()

var thisDay = parseInt(day, 10);

そうしないと、「0」で始まる文字列は10進数ではなく8進数の定数として解釈されます。もちろん、「08」と「09」は無意味な8進定数です。2番目のパラメーター(10)は、先行ゼロに関係なく、文字列を10進数の文字列として解釈する必要があることを関数に指示します。

于 2013-01-16T15:18:48.783 に答える