0

特定の日付に日を追加しています:

myDate.setDate(myDate.getDate()+plusdays

plusdays が私の変数である場合、すべて正常に動作します。

ここで、必ずしも休日ではない特定の期間 (最終的にはユーザーが指定) (たとえば、4 月 1 日から 4 月 15 日まで) をスキップできるように結果を計算したいと思います。

同様の質問を確認しましたが、理解できないか、問題を実際に解決していないと思います。

何か案は?

編集:私の主な問題は、計算に関連する場合にのみ日をスキップする必要があることです。つまり、30 日を 3 月 28 日に追加すると、4 月 1 日から 4 月 15 日まではカウントせずに 30 日が追加されますが、3 月 28 日に 1 日を追加すると、結果は単純に 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 に答える