我有一个重复的日历计划,可以说每个星期一,星期三和星期五20:00H和每个星期日15:00H。请注意,我需要采用荷兰格式的24小时制。

现在,我想以以下方式仅显示前三个即将开始的日期,日期和时间:

例如,当星期一是20:00H之前的一个月的10号:


显示下一个即将到来的日期+日期,即星期一10日,20:00H。
显示那里的日期,之后是星期三12月20:00H。
并显示那里的日期,之后是星期五14th,20:00H。


10月10日(星期一)20:00H之后,一切都进一步移动:


显示下一个即将到来的日期和日期,即星期三12月20:00H。
显示那里的日期,之后是星期五14th,20:00H。
并显示那里的日期,之后是星期日16H,15:00H。


我必须能够在给定的结果周围包装一些文本,因此最好在自定义文本中使用三个变量,例如nextdate_1,nextdate_2和nextdate_3。

我希望有人可以在这里帮助我。

莫里斯

最佳答案

如果所有事件定义都作为JavaScript对象加载到一起


要求每个人计算接下来的三遍,
将它们添加到单个数组中
对该数组进行排序,然后
将前三个分配给您的变量。


这是一个开始。请注意,为简洁起见,它使用jQuery的$.each

var now = new Date(),
    times = [],
    nextThree;
$.each(events, function (index, event) {
    var i, time = now;
    for (i = 0; i < 3; i++) {
        time = event.calculateNextAfter(time);
        times.push(time);
    }
});
times.sort();
nextThree = times.slice(0, 3);


更新:要对事件本身进行建模,取决于事件的复杂程度。第一个障碍是,每个事件都可以同时发生在星期几的任意组合上。假设您有两个事件,这似乎与您的描述相符。这可以像一个包含时间的对象一样简单,该对象包含一个以整数表示的时间和一个星期几的布尔值数组。

event1 = {
    time: 2000,
    days: [false, true, false, true, false, true, false]
}
event2 = {
    time: 1500,
    days: [true, false, false, false, false, false, false]
}


如果您阅读了JavaScript中的面向对象程序设计,则添加行为将变得更加复杂。不幸的是,我们远远超出了标准的SO问题,即“我如何进行这项工作?”

08-05 09:20