3

这适用于基本上允许您设置给定事件的第一个日期,然后设置重复周期的系统。

例如。我设定了一个从现在起一周的日期,即 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);
            }
4

3 回答 3

0

我会做的(可能不是最好的解决方案,我现在只是想出来)是从初始日期开始并使用循环:while您观察的日期小于当前日期,增加观察日期一周(两周、一个月、一年等)。如果您降落在当前日期,则会发生该事件。否则就另当别论了。

您可以使用诸如date.setDate(date.getDate()+1);将日期增加一天、+7一周相同、分别使用月set/getMonthset/getFullYear年的方法。如果你给出一个超出范围的值,JS 会包装它(所以 3 月 32 日变成了 4 月 1 日)

于 2012-07-12T12:43:20.947 回答
0

此外,为此的 SQL 实现将使用 DATEADD:

http://sql-plsql.blogspot.com/2010/07/dateadd.html

您不必担心闰年等特殊日期,因为大多数 Date 函数都会处理这些问题。

或者,您可以按照其他用户的建议使用 getDate()、getMonth()。var 今天 = 新日期();today.setDate(today.getDate() + numberOfDaysToAdd);

于 2012-07-12T12:47:54.283 回答
0

请查看以下代码以获取一些原始想法

    var someDate = new Date();
for(var i = 0 ; i < 7 ; i++)
    {
someDate.setDate(someDate.getDate() + 1);   
        console.log(someDate)
    }

您可以在下面的小提琴中进行相同的测试

从当天起连续 7 天

于 2015-06-30T08:57:08.393 回答