「間隔」によって本当にオブジェクトが必要なのか、それとも毎日のDateInterval
開始/終了が個別に必要なのかは明確ではありません。DateTime
いずれにせよ、以下は賢明な出発点として役立つはずです。
<?php
$start_date = '27:04:2013';
$start_time = '16:30';
$end_date = '29:04:2013';
$end_time = '22:30';
// Date input strings and generate a suitable DatePeriod
$start = DateTime::createFromFormat("d:m:Y H:i", "$start_date $start_time");
$end = DateTime::createFromFormat("d:m:Y H:i", "$end_date $end_time");
$interval = new DateInterval('P1D');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $date) {
// Get midnight at start of current day
$date_start = clone $date;
$date_start->modify('midnight');
// Get 23:59:59, end of current day
// (moving to midnight of next day might be good too)
$date_end = clone $date;
$date_end->modify('23:59:59');
// Take care of partial days
$date_start = max($start, $date_start);
$date_end = min($end, $date_end);
// Here you would construct your array of
// DateTime pairs, or DateIntervals, as you want.
printf(
"%s -> %s \n",
$date_start->format('Y-m-d H:i'),
$date_end->format('Y-m-d H:i')
);
}
次の出力が生成されます。
2013-04-27 16:30 -> 2013-04-27 23:59
2013-04-28 00:00 -> 2013-04-28 23:59
2013-04-29 00:00 -> 2013-04-29 22:30
補遺
幸運にも PHP 5.5.0 以降を使用できる場合は、このDateTimeImmutable
クラスによって複製/変更部分がより整然としたものになります。