icomefromthenet / schedule
管理日程的辅助工具
v1.0.0
2013-08-19 23:56 UTC
Requires (Dev)
- phpunit/phpunit: 3.7.*
- symfony/console: 2.3.*
- symfony/finder: 2.3.*
This package is not auto-updated.
Last update: 2024-09-23 14:52:25 UTC
README
当处理日期和日程时,PHP有两个内置辅助工具DateInterval和DatePeriod。使用这两个类可以让你走得更远。有一些事情需要注意。
- DatePeriod不是默认的,它使用Traversable接口,并且没有像next、current、rewind这样的方法。
- 您需要将您的周期与DateInterval中使用的DSL相匹配。
- 无法使用DatePeriod来表示非线性日期间隔,例如仅工作日。
- 如果您想稍后创建它,仍然需要设计一个将设置映射到DateInterval的方法。
- 如果想要从中间开始,您需要在代码中跳过给定的偏移量。
我编写了这个辅助工具来解决这些不足,我使用了一个构造器,它将接受一个字符串名称并返回一个Iterator。在构造期间,您可以要求迭代器跳过,并且我已经实现了以下常见周期。
- 年度
- 每周
- 每月
- 双周
- 工作日
- 双月
- 季度
示例
use DateTime; use IComeFromTheNet\Schedule\ScheduleBuilder; $start = new DateTime(); $reoccurance = 12; $builder = new ScheduleBuilder(); return $builder->daily() ->start($start) ->limit($reoccurance) ->skipStart() ->build();
这创建了一个每天的计划,限制为12次发生,其中跳过了第一个周期。重要的是要注意,如果没有跳过起始周期,将有13次发生。这是PHP DatePeriod的一个特性,当使用整数设置限制时,这个数字是起始之后重新发生。总发生次数是起始次数 + 重新发生次数(限制)。
use DateTime; use IComeFromTheNet\Schedule\ScheduleBuilder; $start = new DateTime(); $reoccurance = 12; $builder = new ScheduleBuilder(); return $builder->monthly() ->start($start) ->limit($reoccurance) ->offset(4) ->build();
这将返回一个每月的计划,其中有4次发生。如果起始月份是八月,则第一次起始值在十二月。使用LimitIterator来限制结果集。
use DateTime; use IComeFromTheNet\Schedule\ScheduleBuilder; $start = new DateTime(); $reoccurance = 12; $builder = new ScheduleBuilder(); return $builder->create('monthly') ->start($start) ->limit($reoccurance) ->build();
这将返回一个每月的计划,规则是通过字符串定义的,而不是直接的方法调用。