2

設定した日付範囲から特定の日付を除外する方法を見つけようとしています。日付範囲は次のように正常に機能します。

<?php $newBegin = new DateTime('6/30/2010');
$newEnd = new DateTime('7/12/2010');
$newEnd = $newEnd->modify( '+1 day' );

$newDaterange = new DatePeriod($newBegin, new DateInterval('P1D'), $newEnd);

foreach($newDaterange as $newDate){
    echo $newDate->format("jnY") . " ";
} ?>

結果は次のように出力されます。

3062010 172010 272010 372010 472010 572010 672010 772010 872010 972010 1072010 1172010 1272010

ただし、クライアントは各日付範囲から特定の日付を除外する必要があるため、次のように日付を入力し7/2/2010 7/4/2010 8/4/2010て、日付範囲から除外することをお勧めします。これはまったく可能ですか?週末などを除外するつもりはありません。日付のセットを入力して、日付範囲から除外するだけです。どんな提案でも大歓迎です!


アップデート:

@hek2mgl がこれを求めたのでvar_dump()get_field('test_select'));

var_dump(get_field('test_select'));

結果:

array(2) { [0]=> string(8) "7/2/2010" [1]=> string(8) "

完全なコード (動作していません):

$newBegin = DateTime::createFromFormat('n/j/Y', '6/30/2010');
$newEnd = DateTime::createFromFormat('n/j/Y', '7/12/2010');
$newEnd = $newEnd->modify( '+1 day' );

$exclude = array();

// stores dates like so: 7/2/2010 7/3/2010
foreach(get_field('test_select') as $datestring) {
    $exclude []= new DateTime($datestring);
}

$newDaterange = new DatePeriod($newBegin, new DateInterval('P1D'), $newEnd);

foreach($newDaterange as $newDate){
    if(!in_array($newDate, $exclude)) {
        echo $newDate->format("jnY") . " ";
    }   
}
4

1 に答える 1

3

DatePeriodクラスを使用して、範囲内の複数の日付を除外する方法はありません。ただし、オブジェクトin_array()と一緒に使用できDateTimeます。これにより、次のようなコードになる可能性があります。

$newBegin = new DateTime('6/30/2010');
$newEnd = new DateTime('7/12/2010');
$newEnd = $newEnd->modify( '+1 day' );

$exclude = array(
    new DateTime('7/2/2010'),
    new DateTime('7/4/2010'),
    new DateTime('8/4/2010')
);

$newDaterange = new DatePeriod($newBegin, new DateInterval('P1D'), $newEnd);

foreach($newDaterange as $newDate){
    if(!in_array($newDate, $exclude)) {
        echo $newDate->format("jnY") . " ";
    }   
} 

出力:

3062010 172010 372010 572010 672010 772010 872010 972010 1072010 1172010 1272010

アップデート:

コメントで、受信した日付文字列のリストを配列DateTimeで使用できるオブジェクトに変換する方法を尋ねました$exclude

例:

$exclude = array();

// stores dates like so: 7/2/2010 7/3/2010
foreach(get_field('test_select') as $datestring) {
    $exclude []= new DateTime::createFromFormat('n/j/Y', $datestring);
}

それでおしまい。:)

于 2013-04-21T14:53:04.837 に答える