繁体   English   中英

简单实用的可重复使用的PHP逻辑

[英]Simple practical usable PHP logic for recurrence

以前提交过此文件,但由于有人否决了它,并说它已经被回答,所以没人会回答。

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

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

我确实同意这篇文章http://martinfowler.com/apsupp/recurring.pdf很好,但是它是如此抽象,以至于我无法理解。

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

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

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

事实是,这是一个难题。 用户并不是真正想做的“即时”编辑逻辑。 相反,他们希望您作为一名程序员来预期自己会做的事情并为此提供了一条规则-例如,他们不想弄清楚如何计算该月的第二个星期三。

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

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

有关循环日历逻辑的实际示例,请查看您的PDA或类似产品。

几年前,我必须在Intranet应用程序中建立日历,并基本上复制了Palm重复使用的选项。 这对人们来说很有意义,因此我认为它是成功的。 但是它没有在数据库中存储真正干净的内容。 我的代码最后进行了许多仔细的检查,以确保数据是否一致以及各种规则(如果出现问题的话)来纠正问题。 这有助于我们在开发过程中积极使用它。 :-)

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

实际上,设置重复项目需要在UI中使用一些JavaScript来控制不同的设置。 DB中的条目具有多个值的组合,以指示重复步骤(例如1周,2周...)的重复范围(例如每天,每周,...)和任何变化(例如,每周一次) “每周的周一,周三,周四”)。

最后,我们有一些逻辑,我从来没有完全实现处理时区和夏时制的逻辑。 这很困难,因为您必须允许该移位有选择地应用。 也就是说,某些压光机项目将保留在最终用户本地的时间范围内,而其他压光机项目则固定在某个位置,并且随着夏时制的变化可能会也可能不会发生变化。 在解决这个问题之前,我离开了那家公司。

最后,我之所以要回复,是因为我没有看到其他所有问题。 :-)但是,请阅读并理解该PDF。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM