目前我正在尝试使用jquery计算日历上特定事件的结束日期。有三个条件影响最终日期:
例如,如果我的事件发生在星期一,星期三,星期五,每3周一次,我只希望它发生14次,最终日期是什么?因此,第一个星期一将是1次,然后第一个星期三将是2次,依此类推。如何创建计算此事件发生的最后日期的算法?
答案 0 :(得分:0)
除了您列出的3件事,您还需要一个开始日期。如果没有开始日期,则无法计算结束日期。
首先,您需要计算事件发生日期的哪一天。然后,您可以使用事件发生周的天数,并重复计算哪一周是事件发生的最后一周。然后,您可以使用事件发生的星期几来查找它发生的最后一天。
它看起来像下面的代码。请注意,这不能正确处理您不应该通过所有块的情况,但我会将其作为您必须自己做的事情。
var now = new Date();
var startdate = new Date(now.getFullYear(), now.getMonth(), now.getDate());
var eventdays = [1,3,5]; //Monday, Wednesday, Friday
var repetition = 3;
var maxamount = 14;
var oneday = 86400000;
var runningDate = startdate.getTime();
//Which event days are in this week?
for( var i = 0; i < eventdays.length; i++ ) {
if( eventdays[i] >= startdate.getDay() ) {
maxamount -= eventdays.length-i;
break;
}
}
runningDate += oneday * (7 - startdate.getDay());
//runningDate is now sunday of the next week
var fullperiods = Math.floor( (maxamount-1) / eventdays.length );
runningDate += oneday * 7 * repetition * fullperiods;
maxamount -= fullperiods * eventdays.length;
//The rest of the days
runningDate += oneday * eventdays[maxamount];
console.log( new Date( runningDate ) );