我正在使用asp mvc 3,jquery完整日历,ms sql sever 2008和c#。
我想知道是否有人知道如何制作重复活动?
我不确定如何制作它们。
例如,在Google日历中,您可以永久地重复预约。我怀疑他们在数据库中生成X次约会。
我想知道如何在我的数据库中有一行,并且知道如何在需要时调用它。
google日历和Outlook也有很多重复选项,比如1月,上个月等重复播放。
是否有任何库构建具有此功能?或者我是从头开始制作的?
P.S
我在共享主机上,因此解决方案必须使用有限的权限。
答案 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)