📅 新日历功能:循环活动的结束日期

您现在可以在 Discourse Calendar 中为重复事件设置结束日期了!:sparkles:

这项备受期待的功能允许您指定重复事件系列何时停止,从而让您更好地控制事件安排。

创建每天、每周或每月重复的事件 - 现在还可以确定它们的确切结束时间。

有关日历插件及其功能的更多详细信息,请访问官方日历主题

未来,我们可能会添加排除特定工作日的可能性。

22 个赞

关于“直到 (Until)”这个词,一个棘手的问题是,它是否包含在内并不完全明显?我们可以在这里做些什么来提供更好的清晰度吗?

2 个赞

是的,Google 日历也存在同样的问题!他们使用 On,但它存在同样的歧义:

但是,我认为大多数用户会安全地假设 Until 包含该日期。

3 个赞

直到(包含):

编辑:我现在这样做了 UX: better copy by jjaffeux · Pull Request #737 · discourse/discourse-calendar · GitHub 看起来是个简单的好改动。


另一种解决方案是在日期输入旁边显示实际的日期/时间,但可能有点多余?

3 个赞

您可能想借鉴我在一个电子商务项目中实现的代金券开始/结束日期的想法,我正在开发这个项目:


另一个例子,展示了灵活性以及我们如何避免在用户界面中出现日期范围的歧义:


技术细节: 在我们的应用程序中,我们始终将日期存储为“带时区的戳”(postgres),因此没有任何数据库设置或连接设置会影响实际存储的时间戳。尽管 Postgres 不推荐这样做,但我们还是这样做了,因为它在任何情况下和任何 SQL 查询中都能 100% 保证日期的正确性。您可以使用 Postgres 的日期/时间/时区函数直接在 Postgres 中操作日期时区,并确信它始终 100% 正确。我们依赖它。

然后,我们为所有需要它的实体设置了时区:用户配置文件、市场、代金券、会计报告等——这样我们就可以毫不犹豫地即时将任何日期转换为任何时区。

这里的主要收获是:

  1. 始终以带时区的格式存储日期和时间。
  2. 始终存储时区偏好。
  3. 在用户界面中明确日期,不要搞什么“魔法”。
  4. 让用户在点击“保存”之前看到所选时区的实际日期。
1 个赞

你好,

在我自建的实例上(一个月前刚生成的),我看不到任何设置结束日期的选项。

我是不是哪里操作不对?

我认为截图显示的是插入日期/时间对话框,而不是创建事件对话框。

在 Discourse Calendar 中,这是两个不同的工作流程:

  • 插入日期/时间 用于回复中包含 [calendar] 代码块的帖子。
  • 创建事件 会创建一个实际的事件([event ...][/event]),并且在这里可以设置重复事件的选项,包括重复结束日期。

因此,对于本主题中提到的功能,请尝试打开编辑器中的 + 菜单,选择创建事件,而不是插入日期/时间

我最近也在测试重复事件流程,并发现了一个边界情况:当有界重复完全过期后会出现问题。我已经在此处提交了一个修复:

1 个赞

确实,它的目的是在一个主题中维护日历(收集事件)。

抱歉造成了误解,我是新手。

确实,在创建事件时,它似乎可以正常工作。

遗憾的是,在“插入日期/时间”时它无法正常工作。

感谢你的帮助!

1 个赞

没问题 :slightly_smiling_face:

只是为了澄清一下,我认为这其实并不是 插入日期/时间 功能本身无法正常工作的问题——而是两种不同的工作流程。

插入日期/时间 适用于你在主题的初始帖子中使用了 [calendar] 代码块,并且希望带日期的回复显示在该特定主题的日历上的情况。

创建事件 则会创建一个实际的 Discourse 事件([event ...][/event])。本主题中讨论的循环事件结束日期,适用于该事件循环系统。

因此,如果你的目标是为单个主题维护一个本地日历,那么你原始截图中展示的工作流程是合适的;只是它没有使用与事件相同的有界循环功能。

是的,我明白了。

我的用例是维护学校日历。总是有预约需要录入,因此任何家长都可以通过回复该主题来添加新的预约。

但就在昨天,我需要录入一个重复的预约,不幸的是,在这个工作流中我们没有这个选项。所以我不得不手动操作,通过多次回复该主题并附上新的日期来完成(不知道是否有更巧妙的方法……)。

可能有一种方法可以在保留您现有的本地话题 [calendar] 工作流的同时,实现手动回复的自动化。

一种可能的方案是使用一个启用了“通过邮件回复”功能的专用 Discourse 用户,然后通过 Power AutomateAzure Logic App 之类的工具生成带有具体日期的单独回复,并以电子邮件的形式发送到日历话题中。

例如,一个带有结束日期的每周预约,可以由自动化流程扩展为所需的单独回复,这样家长看到的仍然是一个普通的话题日历,而不是分散的活动话题。

不过,Discourse 中关于每个用户的“通过邮件回复”密钥有一些细节需要仔细配置,因此可能不适合在当前话题中详细讨论这些设置。

如果这种方法对您有帮助,我很乐意在一个单独的 Meta 话题中协助您完成配置。

目前这种情况只发生过一次,所以我会等到下次再处理(希望不会再出现)。

我会继续保留通过邮件回复的技巧,谢谢。但这是否意味着,如果一个活动每周举行一次、持续整整一年,我们就得生成 52 条回复?这会让主题变得很难阅读……

除此之外,我想,既然我有管理员权限,我也可以直接使用 API 手动添加这些预约。

感谢大家的分享!

是的——遗憾的是,API 虽然可以自动创建回复,但并不能真正解决版面杂乱的问题:对于主题日历而言,每个日历条目仍然以单独的回复形式呈现。

我刚发现一个现有的功能请求,几乎完全符合你的使用场景:

他们的示例是一个连续十二个周三进行的课程,他们也指出了同样的问题:逐个创建每次出现既繁琐又会让主题变得杂乱。

他们建议允许在插入日期/时间中设置重复规则,并指定最后一次出现的结束日期,这听起来非常接近你的需求。

因此,与其构建一个会生成 52 个帖子的 API/Power Automate 变通方案,不如在那个功能请求中补充你的校历使用场景,那可能是更合适的地方。

1 个赞

谢谢,我会这么做的!