2

私は、月に 2 日のうちの 1 日を選択するようにユーザーに求めているアプリケーションを持っています。4日か18日。ユーザーがこの値を選択すると、その値と今日の日付が取得されます。

処理を行う前に、管理作業のために 25 日を追加する必要があります。

day = parseInt(day);
var curDateTime = new Date().getTime(),
timeToAdd = (1000*60*60*24*25),
datePlusDays = new Date(),
finalDate = new Date();

datePlusDays.setTime(timeToAdd + curDateTime);

function incrementToSelected(toIncrement, incrementTo){
    var currentDay = parseInt(toIncrement.getDate());

    if (currentDay != incrementTo){
        var addedDay = new Date();
        addedDay.setTime(toIncrement.getTime() + (1000*60*60*24));
        incrementToSelected(addedDay, incrementTo );
    } else if (currentDay === incrementTo){
        finalDate = toIncrement;
    }
}

incrementToSelected(datePlusDays, day);

datePlusDays は、今日の日付 + 25 日になりました。ここで、ユーザーが選択した日付の次の発生を見つける必要があります。

現在、上記の方法を使用して日付に1日(1000 * 60 * 60 * 24)を追加し、それが次の発生であるかどうかを確認しています。 .

これは機能しますが、最大呼び出しスタック サイズを超えたというエラーが発生する場合があります。日付の次の発生を見つける他の方法はありますか?

4

3 に答える 3

1

タイムスタンプをいじる必要はありません。これはあなたが望むことをします。日を「incrementTo」に設定し、必要に応じて月 (incrementTo が現在の日付以下の場合) と年 (月が 12 月の場合、1 月にロールオーバーして年を増分する場合) を条件付きで増分します。

function incrementToSelected(toIncrement, incrementTo){
    if (toIncrement.getDate() >= incrementTo) {
        toIncrement.setDate(1); // Avoid month-rollover edge case
        var m = toIncrement.getMonth();
        if (m == 11) {
            toIncrement.setFullYear(toIncrement.getFullYear()+1);
            toIncrement.setMonth(0);
        } else {
            toIncrement.setMonth(m + 1);
        }
    }
    toIncrement.setDate(incrementTo);
}
于 2013-05-16T10:54:28.317 に答える
-1

私はスティーブンが貢献したものを取り、次の方法で機能するようになりました。

このメソッド内の関数の必要性を取り除きました。実際にはかなり単純な手法であるのに、複雑にしすぎていました。

day = parseInt(day);
var curDateTime = new Date().getTime(),
    timeToAdd = (1000*60*60*24*25),
    datePlusDays = new Date(timeToAdd + curDateTime);

if (day >= datePlusDays.getDate()){
    datePlusDays.setDate(day);
} else if (day < datePlusDays.getDate()){
    var m = datePlusDays.getMonth();
    if (m == 11){
        datePlusDays.setFullYear(datePlusDays.getFullYear() + 1);
        datePlusDays.setMonth(0);
    } else {
        datePlusDays.setMonth(datePlusDays.getMonth() + 1);
    }
    datePlusDays.setDate(day);
}

return datePlusDays;
于 2013-05-16T11:57:02.020 に答える