这是一个系统,它基本上允许您设置给定事件的第一个日期,然后设置重复周期。
EG。我设定了从现在开始的一个星期的日期,即2012年7月19日,所以我知道我必须把猫带出牛奶。我还将其设置为每周通知,因此在未来几周内,我希望收到相同的通知。
原始日期位于我的数据库中,第1周正常,但在第2周我需要将日期作为原始日期加上1周。
从表面上看,这似乎很简单,但我需要确保我能解释闰年和不同的复发频率(每两周,每月,每年,等等)。
我想将此作为javascript实现 - 因为它更快,我觉得可能需要的代码少于更新数据库中的日期。也许这是不可能实现的,任何指针都会很棒。
我认为这些可能是一个起点:
Given a start date , how to calculate number of years till current date in 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);
}
答案 0 :(得分:0)
我会做什么(可能不是最好的解决方案,我现在就提出来)是从初始日期开始并使用循环:while
您观察的日期小于当前日期,将观察日期增加一周(两周,一个月,一年等)。如果您在当前日期降落,则会发生事件。否则它将持续一天。
您可以使用date.setDate(date.getDate()+1);
之类的内容将日期增加一天,相同+7
一周,使用set/getMonth
和set/getFullYear
分别使用数月和年。如果你给出一个超出范围的值,JS将把它包装起来(所以3月32日变成4月1日)
答案 1 :(得分:0)
此外,此实现的SQL实现将使用DATEADD:
http://sql-plsql.blogspot.com/2010/07/dateadd.html
您不必担心像闰年等特殊日期,因为大多数日期功能都会照顾到这一点。
或者,您可以像其他用户建议的那样使用getDate(),getMonth()。 var today = new Date(); today.setDate(today.getDate()+ numberOfDaysToAdd);
答案 2 :(得分:0)
请查看以下代码以获取一些原始想法
var someDate = new Date();
for(var i = 0 ; i < 7 ; i++)
{
someDate.setDate(someDate.getDate() + 1);
console.log(someDate)
}
您可以在下面的小提琴中测试相同的内容