vamsiikrishna / when
日期/日历递归库
Requires
- php: >=5.2.0
This package is not auto-updated.
Last update: 2024-09-14 13:18:10 UTC
README
##When 适用于 PHP 5.2+ 的日期/日历递归库
作者:Thomas Planer
###关于 在进行了全面搜索后,我没有找到可以处理递归日期的 PHP 库。不过有: http://phpicalendar.org/,但是从应用程序中提取递归部分将非常困难。
奇怪的是,Ruby 和 Python 都有非常好的日期递归库
Ruby: http://github.com/seejohnrun/ice_cube
Python: http://labix.org/python-dateutil
由于我没有找到 PHP 的类似库,我创建了 When。
###单元测试
测试是用 PHPUnit (http://www.phpunit.de/) 编写的
初始测试集是从 RFC5545 (http://tools.ietf.org/html/rfc5545) 中的示例创建的。
###文档
初始化类
$when = new When();
初始化类后,您可以通过调用 recur 方法创建一个周期性事件
$when->recur(<DateTime object|valid Date string>, <yearly|monthly|weekly|daily>);
您可以通过指定 limit() 限制要查找的日期数量
$when->limit(<int>);
或者您可以指定一个结束日期
$when->until(<DateTime object|valid Date String>);
注意:结束日期不一定要与周期性模式匹配。
注意:当达到限制或结束日期时,脚本将停止返回结果。
更多文档即将推出,请参考单元测试以了解类的能力。
###示例(更多示例请参阅单元测试)
下一个 5 个星期五 13 日的出现
$r = new When();
$r->recur(new DateTime(), 'monthly')
->count(5)
->byday(array('FR'))
->bymonthday(array(13));
while($result = $r->next())
{
echo $result->format('c') . '<br />';
}
每隔四年,11月第一个星期一之后的第一个星期二,接下来的 20 年(美国总统选举日)
// this is the next election date
$start = new DateTime('2012-09-06');
$r = new When();
$r->recur($start, 'yearly')
->until($start->modify('+20 years'))
->interval(4)
->bymonth(array(11))
->byday(array('TU'))
->bymonthday(array(2,3,4,5,6,7,8));
while($result = $r->next())
{
echo $result->format('c') . '<br />';
}
现在您可以将原始 RRULE 传递给类
$r = new When();
$r->recur('19970922T090000')->rrule('FREQ=MONTHLY;COUNT=6;BYDAY=-2MO');
while($result = $r->next())
{
echo $result->format('c') . '<br />';
}
警告
- 如果您提交的模板没有结果,脚本将无限循环。
- 如果您没有指定结束日期(直到)或模式计数,您必须限制结果数量以避免无限循环
###贡献
如果您想贡献,请创建一个分支,并在提交更改后提交一个 pull request。
在提交 pull request 之前,请确保单元测试通过 100%。
当前有 78 个测试,1410 个断言。
>>>phpunit --verbose tests
PHPUnit 3.4.15 by Sebastian Bergmann.
tests
When_Core_Tests
..
When_Daily_Rrule_Test
.....
When_Daily_Test
.....
When_Iterator_Tests
..
When_Monthly_Rrule_Test
..............
When_Monthly_Test
..............
When_Weekly_Rrule_Test
........
When_Weekly_Test
........
When_Rrule_Test
..........
When_Yearly_Test
..........
Time: 2 seconds, Memory: 6.00Mb
OK (78 tests, 1410 assertions)
###许可
版权 (c) 2010 Thomas Planer
特此授予任何获得此软件及其相关文档文件(“软件”)副本的任何人免费使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许向软件提供方提供软件的人按以下条件进行操作:
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、特定用途的适用性和非侵权性。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论源于合同行为、侵权行为或其他,无论是否与软件或其使用或其他方式相关。