在没有特定日期时间的情况下在两个日期之间填充日期时间php


populating datetime between two dates without certain datetimes php

我需要什么

我想在两个日期时间之间填充日期时间,而不需要从数据库中提取某些日期。

代码

    $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);

如何从$period中排除$exceptionDates

如果你不想事先将句点转换为数组(例如,你有很多),你可以使用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()创建过滤后的日期数组。