【问题标题】:How do I display the next weekly recurring date in a schedule using JavaScript?如何使用 JavaScript 在日程表中显示下一个每周重复日期?
【发布时间】:2013-09-27 17:39:22
【问题描述】:

我需要使用 JavaScript 在网站上每周重复显示下一个事件。假设我们每周六上午 10 点开始一个活动 - 我需要它来显示下一个活动在“周六,(Month) (Date) 上午 10 点”开始。

我唯一需要在网站上保持动态的是下一个事件的日期(monthdate)。

想法 1: 我开始考虑的一种方式是,我需要有某种起始参考日历日期,从日程表开始的地方开始,然后计算一些 n 天模式从该起点开始的即将到来的日期并将其与今天的日期进行比较,然后显示序列中下一个的结果

想法 2: 不是使用 N 天的模式从硬编码的参考点计算,而是如果我编码事件发生的星期几并检查,计算通过比较一周中的天数并添加到今天的日期来确定日期(必须考虑 28/30/31 天的翻转以及一种方法来说明哪些月最多在哪个数字)

也许我的想法有点离谱,但这里的任何帮助将不胜感激。我正在学习 JavaScript,并且来自使用 jQuery 插件的 HTML+CSS 背景,如果这有助于以我能掌握的方式构建您的答案。

【问题讨论】:

    标签: javascript date calendar schedule recurring


    【解决方案1】:

    这是一个可行的粗略解决方案。这只是您需要调试的一般代码,但我认为这是一个很好的起点! Date() 是一个内置的 JavaScript 对象。

    var today = new Date();
    //var dd = today.getDate();    *just some sample functions of Date()*
    //var mm = today.getMonth()+1; *January is 0!*
    
    if(today.getDay() == 6) alert('it is saturday');
    // today.getDate() < 8   *this can be used to check where in the month a day falls
    // if you want only first, second, third, etc., Saturday
    

    如果这有帮助,请告诉我!

    【讨论】:

    • 谢谢,这是一些很好的信息,至少现在我有一些东西要查!这似乎是在 Idea 2 中的路径,我会看看我能找到关于 Date() 的内容
    • 距离用户查看您网站的当前日期还有多远,您需要标记事件吗? IE。如果用户在 2 月 1 日访问,您的目标需要您获取哪些“示例日期”?
    • 这些事件每周都会发生,所以我需要它来显示下一个即将发生的事件。如果它发生在星期六上午 10 点,我希望它在日历上显示下一个星期六的日期和月份。当这一天变成那个日期时,我需要它显示下一个星期六,直到到达那个日期,例如……
    【解决方案2】:

    您可以为此使用 rSchedule(我维护的一个 javascript 循环库)。

    例子:

    假设我们每周六上午 10 点开始一个活动

    import { Schedule } from '@rschedule/rschedule';
    import { StandardDateAdapter } from '@rschedule/standard-date-adapter';
    
    const schedule = new Schedule({
      rrules: [{
        frequency: 'WEEKLY',
        // the hypothetical start datetime of your recurring event
        start: new Date(2019, 5, 15, 10),
      }],
      dateAdapter: StandardDateAdapter,
    });
    

    我唯一需要在网站上保持动态的是下一个事件的日期(月份和日期)。

    // get standard javascript iterator for occurrences starting after now
    const iterator = schedule.occurrences({
      start: new Date()
    })
    
    // the next date
    const nextDate = iterator.next().value;
    
    // or iterate over all future occurrences
    for (const date of iterator) {
      // do stuff...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多