9

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

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

我不确定如何制作它们。

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

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

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

是否有任何图书馆构建有这个?还是我必须从头开始?

附言

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

4

3 回答 3

9

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

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

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

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

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

评论跟进:

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

所以:

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

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

于 2011-02-09T19:40:40.057 回答
1

由于您已包含#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 作为指南:只需为重复事件而不是实际实例创建规则。基于单个事件(没有递归规则)和重复事件规则,使用线程或计时器每分钟查询数据库中的新事件。

于 2015-02-12T16:22:20.403 回答
0

每当有人提出这样的问题时,就会出现“在 SQL 中开发面向时间的数据库应用程序”一书的链接。它可以作为免费 PDF和在Amazon上合法获得。

于 2011-02-09T20:59:59.947 回答