计算日期

时间:2015-03-26 18:53:00

标签: jquery date calendar

目前我正在尝试使用jquery计算日历上特定事件的结束日期。有三个条件影响最终日期:

  • 事件发生的那一天
  • 该事件每周或每两到三周重复一次,等等。
  • 我希望事件发生的次数

例如,如果我的事件发生在星期一,星期三,星期五,每3周一次,我只希望它发生14次,最终日期是什么?因此,第一个星期一将是1次,然后第一个星期三将是2次,依此类推。如何创建计算此事件发生的最后日期的算法?

1 个答案:

答案 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 ) );