Joh*_*ohn 3 php datetime recurring
我有一个日历应用程序,它使用较新的PHP DateTime类.我有办法处理反复发生的事件,但看起来很糟糕,我想看看你们是否有更好的想法:
假设用户查看截止日期为3100的日历 - 此事件应该显示正常情况下每3天重复一次.问题是 - 如何计算该月的那些日子?
=========================================
这就是我基本上这样做的方式,但我知道我更容易丢失一些东西:
我的主要问题来自第1步.PHP DateInterval :: date_diff函数不计算天数差异.它会给我几年,几个月和几天.然后,我必须捏造这些数字以获得大约在3100年12月左右的估计日期.11/16/2009 +(1090年*365.25天)+(9个月*30.5天)+ 15天
当你像9999年一样走向未来时,这个估计可能会在一个月内消失,然后我必须减去很多3天的间隔才能到达我需要的地方.
这可以使用DatePeriod作为Iterator很好地完成,然后过滤到您想要显示的开始日期:
<?php
class DateFilterIterator extends FilterIterator {
private $starttime;
public function __construct(Traversable $inner, DateTime $start) {
parent::__construct(new IteratorIterator($inner));
$this->starttime = $start->getTimestamp();
}
public function accept() {
return ($this->starttime < $this->current()->getTimestamp());
}
}
$db = new DateTime( '2009-11-16' );
$de = new DateTime( '2020-12-31 23:59:59' );
$di = DateInterval::createFromDateString( '+3 days' );
$df = new DateFilterIterator(
new DatePeriod( $db, $di, $de ),
new DateTime( '2009-12-01') );
foreach ( $df as $dt )
{
echo $dt->format( "l Y-m-d H:i:s\n" );
}
?>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3537 次 |
| 最近记录: |