填充两个日期之间的日期时间没有确定的日期时间PHP

时间:2013-07-02 15:48:07

标签: php datetime

我需要什么

我想在两个日期时间之间填充日期时间,而没有从数据库中提取的特定日期。

代码

    $begin = new Datetime('2013-07-01 11:00');
    $endDate = new Datetime('2013-07-25 15:00');
    $exceptionDates = array('2013-07-05','2013-07-11');

    $interval = DateInterval::createFromDateString('1 day');
    $period = new DatePeriod($begin, $interval, $endDate, DatePeriod::EXCLUDE_START_DATE);

如何从$exceptionDates中排除$period

1 个答案:

答案 0 :(得分:2)

如果您不想事先将句点转换为数组(例如,您有很多句点),可以使用FilterIteratorCallbackFilterIterator来拒绝您不想要的元素像这样:

$begin = new Datetime('2013-07-01 11:00');
$endDate = new Datetime('2013-07-25 15:00');

$interval = DateInterval::createFromDateString('1 day');
$period = new DatePeriod($begin, $interval, $endDate, DatePeriod::EXCLUDE_START_DATE);
$period = new CallbackFilterIterator(new IteratorIterator($period), function ($current, $key, $iterator) {
    return !in_array($current->format('Y-m-d'), array('2013-07-05','2013-07-11'));
});

foreach ($period as $d) {
    var_dump($d->format('Y-m-d'));
}

句点本身不是迭代器,因此它用IteratorIterator包装。或者,您可以将句点转换为数组:

$dates = iterator_to_array($period);

并使用array_filter()array_diff()创建过滤日期数组。