【问题标题】:Simple practical usable PHP logic for recurrence用于重现的简单实用的 PHP 逻辑
【发布时间】:2010-10-10 08:12:42
【问题描述】:

我有submitted this previously,但因为有人投了反对票并说它已经回答了,所以没有人会回答它。

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

但他们没有回答我的要求,即在不使用直接 PHP 和 MySQL 之外的其他框架或工具/脚本的情况下,提供一个实用、简单和真实的循环日历设置逻辑示例。

我同意http://martinfowler.com/apsupp/recurring.pdf这篇文章不错,但是太抽象了,看不懂。

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

那么,问题是:如何使用 PHP 和 MySQL 构建定期日历?

【问题讨论】:

  • 看起来你真的很害怕投反对票.. :-)
  • 我不会对你投反对票,但你的问题太抽象了,我无法理解:) 首先你想问什么?
  • 问题是,我如何从数据库中提取日期,如果(设置为 mwf)仅在这些日期上显示它,除非在“排除”表中存在匹配的日期展示它......其他重复模式呢......一个月的第一天等

标签: php mysql event-handling calendar


【解决方案1】:

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

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

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

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

【讨论】:

  • 我最初是一名 ADD 视觉设计师,而不是编码员,所以 fowler 的例子让我难以理解......有什么可以帮助我理解 fowler 的吗?如果你愿意,中介??
  • 您觉得自己在哪些方面不够了解?你不熟悉OO原理吗? UML 图对您来说是陌生的吗?或者有没有你没有完全理解的特定概念?询问这些具体问题将有助于我们为您提供帮助。
  • 好吧,我想真正的问题是,我遇到的大多数问题或我需要创建的脚本都涉及获取正在工作的东西并摆弄它直到它坏了,然后我修复它并将其修改为我的那一刻的需要——我想这意味着我不“理解”任何一个[;o)
  • 示例 - public boolean isOccurring(String eventArg, Date aDate) { ScheduleElement eachSE; ...我得到了关于这些部分的基本“想法”,但不知道哪些数据或可验证性去哪里以及如何使它们一起工作
  • 我建议您编辑您的问题,将重点放在福勒论文的这些方面。与您提出的有点模糊和困难的问题相比,您会在具体问题上获得更多帮助。
【解决方案2】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    相关资源
    最近更新 更多