0

我将天数添加到特定日期:

myDate.setDate(myDate.getDate()+plusdays

plusdays 是我的变量,一切正常。

现在我想以允许跳过给定时间段(最终由用户指定)(例如从 4 月 1 日到 4 月 15 日)的方式计算结果,这不一定是假期。

我已经查看了类似的问题,但要么我不理解它们,要么我猜它们并没有真正解决我的问题。

有任何想法吗?

编辑:我的主要问题是只有在与计算相关时才应该跳过这些日子。换句话说,我需要一个解决方案,如果我将 30 天添加到 3 月 28 日,它会增加 30 天而不计算 4 月 1 日至 4 月 15 日之间,但如果我将 1 天添加到 3 月 28 日,那么结果就是 3 月 29 日。

4

2 回答 2

2

在您当前代码的逻辑中,它应该类似于

myDate.setDate(myDate.getDate() + plusdays + skipdays)

计算skipdays使用

var singleDay = 1000 * 60 * 60 * 24,
    fromdate = new Date('1 Apr 2012'),
    todate = new Date('15 Apr 2012'),
    skipdays = (todate - fromdate) / singleDay ;

更新

发表评论后,您可以使用

function interSectionInDays(include, exclude){
    if (!(include.from > exclude.to) && !(include.to < exclude.from)){
        var from = Math.max(include.from, exclude.from),
            to   = Math.min(include.to, exclude.to),
            singleDay = 1000 * 60 * 60 * 24;

        return (to-from)/singleDay;
    }
    return 0;
}

此方法将计算日期范围之间的相交天数..

用于

interSectionInDays( {from: <startdate>, to:<enddate>}, {from:<excludestartdate>, to:<excludeenddate>} );

所以在你的例子中

var fromdate = new Date(myDate),
    todate = new Date(fromdate).setDate( fromdate.getDate() + plusdays),
    excludestart = new Date('1 Jan 2012'),
    excludeend = new Date('5 Apr 2012'),
    skipdays = interSectionInDays( {from:fromdate, to:todate}, {from:excludestart, to:excludeend});

myDate.setDate( myDate.getDate() + plusdays + skipdays );

演示在 http://jsfiddle.net/gaby/mACmW/

于 2012-07-04T13:13:13.603 回答
0
let curDate = new Date()
let delayDate = new Date(curDate.setDate(curDate.getDate() + 90))

像这样,一切都会好起来的

于 2021-07-07T08:09:47.197 回答