【问题标题】:How to create recurring calendar events?如何创建定期日历事件?
【发布时间】:2011-02-09 19:32:25
【问题描述】:

我正在使用 asp mvc 3、jquery full calendar、ms sql sever 2008 和 c#。

我想知道是否有人知道如何制作重复事件?

我不确定如何制作它们。

例如,在谷歌日历中,您可以每年重复一次约会。我怀疑他们会在数据库中生成 X 次约会。

我想知道如何在我的数据库中有一行,并且知道在需要时调用它。

此外,谷歌日历和 Outlook 有很多重复选项,如第一个月重复、上个月重复等。

是否有任何库构建具有此功能?还是我必须从头开始?

附言

我在共享主机上,因此解决方案必须使用有限的权限。

【问题讨论】:

标签: c# sql-server asp.net-mvc-3 google-calendar-api reminders


【解决方案1】:

生成所有可能的事件重复(理论上)会用用户很可能永远不会看到的事件填满您的存储空间(恭喜您 999,999,999,999,999,999,999 岁生日!)。

这需要更多的工作,但解决方案基本上是存储一个(或多个)重复规则表,您在构建日历时将其链接到日历条目:

“对于显示的一周中的每一天,检查那些日子重复的事件” “对于显示的每个月的每周,检查那些周内重复的事件” “一年中的每个月”等......

您需要进行多少次检查取决于您想要的重复类型(和持续时间)的数量。

至于压制事件,这是另一个表格,列出了必须压制的日期/时间点。 "如果显示星期一,则显示所有在月份重复的事件,除了抑制表中列出的事件"

评论跟进:

好吧,您将拥有标准的日历条目表来存储核心信息。日期/时间等...然后至少有两个其他表来存储重复信息。一个存储你的重复规则的。 “每个星期一”、“每月的第一天”、“每年”等...,以及链接日历条目和规则的第三个表

所以:

 calendar entries table  <--->  link table  <--->  repeat rules table

查询将是构建事物的问题,以便在您考虑的日期出现适当的规则并为您提供要显示的日历条目的 ID。如果您执行一个奇特的查询,该查询根据您传入的日期动态链接到适当的规则,可能会变得丑陋。

【讨论】:

  • @Marc B - 你能详细说明一下吗?就像让我们每周一重复。那么日历的构建会是什么样子呢?我是否会进行查询以查找所有“在星期一重复”然后为整周构建 4 个任务?
  • @Marc B - 所以这个链接表只有哪个ID(即正在使用哪个规则)。然后我会在这张表上查询并找出正在使用的规则?
  • 基本上是的。规则链接可能有额外的信息,比如“仅在接下来的 10 个星期一”或“在 2011 年停止重复”等......但基本上 - 一些日历条目,以及一些关于如何/何时重复它们的额外数据。
  • Marc B - 好的,我得想想怎么做。怎么提醒。那也必须链接吗?
  • 取决于提醒。对于简单的,主日历条目表中的单个字段就可以了,带有提醒应该出现的时间偏移,将提醒变成另一种类型的日程条目
【解决方案2】:

由于您已包含#google-calendar 标签,我猜这就是您正在使用的。 Google 日历使用 REST 和 JSON 调用。这是一个例子:

{
  "summary": "Daily project",
  "start": {
    "dateTime": "2011-12-12T10:00:00",
    "timeZone": "Europe/Zurich"
  },
  "end": {
    "dateTime": "2011-12-12T11:00:00",
    "timeZone": "Europe/Zurich"
  },
  "recurrence": [
    "RRULE:FREQ=DAILY;COUNT=5"
  ]
}

这将创建一个名为“每日项目”的活动,该活动每天上午 10 点到 11 点发生,并连续 5 天重复。

由于您使用的是 C#,因此您还可以使用 Google API (v3) 事件对象。这具有创建递归事件所需的所有属性。但是,您仍然应该查看 JSON 结构以了解递归规则是如何形成的。

如果您不使用 Google 日历,您仍然可以使用他们的 API 作为指南:只需为重复事件而不是实际实例创建规则。根据单个事件(没有递归规则)和重复事件规则,使用线程或计时器每分钟查询数据库中的新事件。

【讨论】:

    【解决方案3】:

    每当有人提出这样的问题时,就会出现“在 SQL 中开发面向时间的数据库应用程序”一书的链接。它以free PDFAmazon 的形式合法提供。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 2022-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      • 2012-01-15
      相关资源
      最近更新 更多