0

開始日時と終了日時を投稿しています。次に例を示します。

$_POST['start_date'] //this might be 27:04:2013
$_POST['start_time'] //this might be 16:30
$_POST['end_date'] //this might be 29:04:2013
$_POST['end_time'] //this might equal 22:30

投稿された時間間隔が伸びる日ごとにオブジェクトの配列を作成したいのですが、これは DateInterval オブジェクトでしょうか? もしそうなら、上記の投稿された値で、次の配列を取得したい

[0] 27:04:2013 16:30:00 27:04:2013 23:59:59
[1] 28 04:2014 00:00:00 28 04:2014 23:59:59 
[2] 29:04:2014 00:00:00 29:04:2014 22:30:00
4

2 に答える 2

1

「間隔」によって本当にオブジェクトが必要なのか、それとも毎日の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クラスによって複製/変更部分がより整然としたものになります。

于 2014-04-26T18:55:10.617 に答える