2012-01-03 18 views
6

私はこれを永遠に見てきましたが、答えはどこにもありません。ここに問題があります:PHP、日付範囲の一部が別の日付範囲内にあるかどうかを確認

私は2つの日付範囲を持っています。

$daterange1 = 2012-04-20 till 2012-04-28 
$daterange2 = 2012-04-18 till 2012-05-01 

ここで、daterange2がdaterange1内にあるかどうかを知りたいと思います。しかし、あなたが見ることができるように、daterange2は部分的にdaterange1の中にあります。 2012-04-28

  • 2012から04まで、2012年4月20日
  • 2012-04-20まで

    1. 2012-04-18:バック3つの変数を取得する任意の方法は、のようなものがあります-28まで2012-05-01

    私はそれが少し曖昧に聞こえることは知っていますが、私は実際にそれをどのように異なって説明するのか分かりません。

  • +3

    私は質問を理解しています。すべての時間を 'strtotime()'関数で変換して比較したいと思うかもしれません。たぶん、 'DateTime'オブジェクトがあなたの役に立つかもしれません。 –

    +0

    範囲が範囲内であり、第3変数 –

    答えて

    5

    論理的には、範囲の要件を部分的に別のものにすることができます。範囲2の終了日

  • 範囲1の終了日は、範囲2の終了日より<ではなく、より範囲2の開始日よりもなく>
  • 範囲1の開始日がある

      >:

      範囲があれば、部分的にのみ、別の範囲内にあります<が範囲2の開始日よりも短い場合

    これらのいずれかまたは両方が真の場合、範囲は互いに一致します。

  • 7

    ここでは、PHPのDateTimeクラスを使用した例を示します。無効な日付文字列をDateTime::__construct()に渡すと、関数は例外をスローしますので、これが心配な場合はtry/catchブロックを実装する必要があります。また、PHPのminmax関数を使用して、日付の指定順序に関係なく使用します。

    $daterange1 = array('2012-04-20', '2012-04-28'); 
    $daterange2 = array('2012-04-18', '2012-05-01'); 
    
    $range_min = new DateTime(min($daterange1)); 
    $range_max = new DateTime(max($daterange1)); 
    
    $start = new DateTime(min($daterange2)); 
    $end = new DateTime(max($daterange2)); 
    
    if ($start >= $range_min && $end <= $range_max) { 
        echo 'woot!'; 
    } else { 
        echo 'doh!'; 
    } 
    
    0

    これは非常に古い投稿です。しかし、まだ誰かが立ち往生した場合。重複する日付の完全な例は次のとおりです。

    <?php 
    $daterange1 = array('2017-09-24', '2017-09-28'); 
    $daterange2 = array('2017-09-22', '2017-09-25'); 
    
    $range_min = new DateTime(min($daterange1)); 
    $range_max = new DateTime(max($daterange1)); 
    
    $start = new DateTime(min($daterange2)); 
    $end = new DateTime(max($daterange2)); 
    
    if ($start >= $range_min && $end <= $range_max) { 
    echo 'Overlapping!'; 
    } 
    else if($end > $range_min && $start < $range_max){ 
    echo "partialy"; 
    } 
    else { 
    echo 'free!'; 
    } 
    ?> 
    
    関連する問題