2

我之前已经提交过,但是因为有人投了反对票并说已经回答了,所以没有人会回答。

我知道这里有类似的帖子:

但他们没有回答我的请求,这是一个实用、简单和真实的循环日历设置逻辑示例,而不使用直接 PHP 和 MySQL 以外的其他框架或工具/脚本。

我同意这篇文章http://martinfowler.com/apsupp/recurring.pdf很好,但它太抽象了,我无法理解。

我知道还有其他“系统已经做到了这一点”,但这是我自己的白鲸,我会在某个时候弄清楚 - 我只是想在此过程中得到一些帮助。

所以,问题是:如何使用 PHP 和 MySQL 构建一个循环日历?

4

2 回答 2

1

您应该努力理解 Fowler 的文章。它确实涵盖了它。

事实是,这是一个难题。“即时”编辑逻辑并不是用户真正想做的事情。相反,他们希望作为程序员的你已经预料到他们想要做什么并为此提供了一个规则——例如,他们不想弄清楚如何计算每月的第二个星期三。

听起来您真正的问题在于对 MySQL 中的重复进行建模。您可以使用Google 的 spec,它可以存储在数据库中并在 Stack Overflow 之前进行介绍。Fowler 的文章还就可以在 RDBMS 中表示的明确定义的类提供了一些很好的起点。

这是一个难题。虽然 SO 希望您成功,但我们只能引导您进入流程。我们不能强迫你喝酒。

于 2009-02-27T14:18:38.610 回答
0

有关循环日历逻辑的实用、真实示例,请查看您的 PDA 或同等设备。

几年前,我在一个 Intranet 应用程序中构建了一个日历,并且基本上复制了我的 Palm 用于重复选项的内容。这对人们来说是有意义的,所以我认为它是成功的。但它并没有在数据库中存储真正的干净。我的代码最终进行了大量仔细检查,以确保数据与各种规则保持一致,以便在出现问题时进行纠正。这有助于我们在开发它时积极使用它。:-)

就存储而言,日历条目包含一个标志,指示它是否是循环系列的一部分。如果不是,则为非经常性条目。如果是,那么编辑它有几个选项,其中一个是在此条目处打破系列。经常性条目作为离散项目放入数据库;这是出于性能原因而进行的一种非规范化。除此之外,这意味着想要检查日历的其他代码不必担心重复项目。我们通过始终要求该系列的结束日期来解决“永无止境”的问题。

实际上,设置重复项目涉及 UI 中的一些 JavaScript 来控制不同的设置。数据库中的条目有一个值组合来指示重复范围(例如每天、每周……)、重复步骤(例如 1 周、2 周……)和任何变化(每周让你说“每周一、三、四”)。

最后,我们有一些我从未完全实现处理时区和夏令时的逻辑。这很困难,因为您必须允许有选择地应用班次。也就是说,一些日历项目将在最终用户本地保持时间,其他项目固定在一个位置,并且可能会或可能不会随着夏令时移动。我在解决这个问题之前离开了那家公司。

最后,我回复这个是因为我没有看到所有其他问题。:-) 但是去阅读并理解那个PDF。

于 2009-03-01T23:57:44.427 回答