这适用于基本上允许您设置给定事件的第一个日期,然后设置重复周期的系统。
例如。我设定了一个从现在起一周的日期,即 2012 年 7 月 19 日,所以我知道我必须把猫和牛奶一起放出去。我还将它设置为每周通知,因此在未来几周我希望收到相同的通知。
该原始日期位于我的数据库中,这对于第 1 周来说很好,但在第 2 周,我需要将日期作为原始日期加上 1 周返回。
从表面上看,这似乎很简单,但我需要确保我可以考虑闰年和不同的重复频率(每两周一次、每月一次、每年一次,等等)。
我想将其保留为 javascript 实现 - 因为它更快,而且我觉得可能需要的代码比更新数据库中的日期要少。也许这是无法实现的,任何指针都会很好。
我认为这些可能是一个起点:
给定开始日期,如何在javascript中计算到当前日期的年数
给定一个日期,我如何有效地计算给定顺序(每周、每月、每年)中的下一个日期?
更新,我写了下面的内容来返回在每种不同情况下添加的时间量,从那里我可以使用下面的答案:
var strDate = $(this).find('.next').text();
var frequency = $(this).find('.occurs').text();
var frmDate = getDateObject(strDate);
var toDate = new Date();
var days = parseInt(Math.floor((frmDate - toDate) / 86400000));
if(days < 0) {
// find out how many WHOLE 'frequencies' have passed
var weeks = Math.ceil(0 - (days / 7));
var months = Math.ceil(0 - (monthDiff(toDate,frmDate)));
var years = Math.ceil(months / 12);
//alert(days + '/' + weeks + '/' + fortnights + '/' + months + '/' + quarters + '/' + years);
if(frequency == 'Weekly') { frmDate.add(weeks).weeks(); }
if(frequency == 'Fortnightly') { frmDate.add(weeks*2).weeks(); }
if(frequency == 'Monthly') { frmDate.add(months).months(); }
if(frequency == 'Quarterly') { frmDate.add(months*3).months(); }
if(frequency == 'Annually') { frmDate.add(years).years(); }
var newdate = frmDate.toString("dd/MM/yyyy");
//alert(newdate);
$(this).find('.next').text(newdate);
}