javascript - 将日期递增到下一个预定义的日期

标签 javascript jquery date

我有一个应用程序,我要求用户在一个月中的 2 天中选择一天。 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 天。现在,我需要找到用户选择的下一个日期。

目前,我正在使用上面的方法向日期添加一天 (1000 * 60 * 60 * 24) 并检查是否是下一次出现,如果没有添加另一天,是否设置了 finalDate带日期。

这确实有效,但在某些情况下,我会收到超出最大调用堆栈大小的错误。有没有其他方法可以找到下一次出现的日期?

最佳答案

无需弄乱时间戳。这会做你想做的。它将日期设置为“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);
}

关于javascript - 将日期递增到下一个预定义的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16585302/

相关文章:

javascript - 检查任何对象的属性是否设置为 true

javascript - 在 DOMNodeInserted 事件中修改插入的元素会产生 "too much recursion"

jQuery 托管在 Google CDN : why is Internet access still needed?

jquery - 奇怪的scrollTop()错误(在某些浏览器中)

php - 如何在 PHP 中比较日期

DB/Rest 支持的 Java 日历/日期最小值

arrays - 如何从当前函数VBA Excel获取单元格行

javascript - 如何只显示一次网站预加载器

Javascript - 在所有页面上禁用按钮

javascript - 拖放跨域、iframe、浏览器窗口