2016-12-12 4 views
0

お客様が最初に特定の日付範囲内で予約した場合、特別料金を割り当てるよう依頼したときにクライアントの初期要件を解決しました。PHP:予約された日付が指定された日付の範囲内にあるかどうかを調べる

しかし、彼は今では複数の日付範囲に要件を拡張しています。私はこれまでに行っていた作業コードをどのように操作するかについて愚かなままでした。

ここで私は1つの日付範囲

$book_start_date = $start->format('d F Y'); 
$book_end_date = $end->format('d F Y'); 

$daterange_season = array('2017-01-20', '2017-02-15'); 
/* 20 January 2017 - 15 February 2017 : Peak Season */ 

$daterange_booked = array($book_start_date, $book_end_date); 

$range_min = new DateTime(min($daterange_season)); 
$range_max = new DateTime(max($daterange_season)); 

$start_book = new DateTime(min($daterange_booked)); 
$end_book = new DateTime(max($daterange_booked)); 

if ($start_book >= $range_min && $end_book <= $range_max) { 

// Apply special rate 

} 

のために以前に使用したコードだ今、私は、複数の日付が

2016-11-25 -----> 2017-01-02 
2017-01-20 -----> 2017-02-06 
2017-03-17 -----> 2017-03-27 
2017-04-27 -----> 2017-05-04 
2017-05-25 -----> 2017-05-31 

の範囲持っている誰も私に取る方向を示すことはできますか?

実際、CSSの担当者ですが、実際にはjQueryとPHPを実行する必要があります。

+0

現在使用しているコードに問題がありますか?それは論理的に正しいと思われる。 – Maximus2012

+0

元のコードごとに1シーズンだけでなく、より多くのシーズン/日付範囲をリストする必要があります。そして、各範囲の開始日と終了日をペアにする方法がわかりません –

+3

範囲定義とそれをループするために多次元配列を使用し、適切な日付が含まれている場合はすべての範囲をチェックしてください。 – rafwlaz

答えて

3

これはあなたが必要とする任意の範囲で動作します。

$book_start_date = $start->format('d F Y'); 
$book_end_date = $end->format('d F Y'); 

$daterange_season = array(
    array('2017-01-20', '2017-01-25'), 
    array('2017-01-29', '2017-02-15') 
); 

$daterange_booked = array($book_start_date, $book_end_date); 

$start_book = new DateTime(min($daterange_booked)); 
$end_book = new DateTime(max($daterange_booked)); 

foreach($daterange_season as $singleRange){ 

    $range_min = new DateTime(min($singleRange)); 
    $range_max = new DateTime(max($singleRange)); 

    if ($start_book >= $range_min && $end_book <= $range_max) { 

    // Apply special rate 
     break; 
    } 

} 
+0

うわー、感謝@diaraf私はちょうどhttp://webcheatsheet.com/php/multidimensional_arrays.php多次元配列の考えを把握しようとしているとコードを投稿して読んでいた!正直言って、私は人々のコードを学ぶことでより良く学びます。私はもう少し読んで、あなたのコードを試してみます。本当にありがとう! –

+0

'min'と' max'の代わりに '$ daterange_booked [0]'と '[1]'と '$ singleRange [0]'と '[1]'を使用します。 – AbraCadaver

+0

@AbraCadaverあなたは正しいですが、私はIwaniが提供するコードを使用して、それを変更します – rafwlaz

関連する問題