如何创建定期日历活动?

时间:2011-02-09 19:32:26

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

我正在使用asp mvc 3,jquery完整日历,ms sql sever 2008和c#。

我想知道是否有人知道如何制作重复活动?

我不确定如何制作它们。

例如,在Google日历中,您可以永久地重复预约。我怀疑他们在数据库中生成X次约会。

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

google日历和Outlook也有很多重复选项,比如1月,上个月等重复播放。

是否有任何库构建具有此功能?或者我是从头开始制作的?

P.S

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

3 个答案:

答案 0 :(得分:9)

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

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

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

您需要做多少次这些检查取决于您需要多少种类型(和持续时间)的重复。

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

评论后续:

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

这样:

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

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

答案 1 :(得分: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"
  ]
}

这将创建一个标题为&#34;每日项目&#34;每天从上午10点到上午11点发生,并连续5天重复。

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

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

答案 2 :(得分:0)

每当有人问这样的问题时,就会出现预订“在SQL中开发面向时间的数据库应用程序”的链接。它可以合法地作为free PDFAmazon使用。