重複の可能性:
2 つの日付範囲が重複しているかどうかを判断する
PHP の 2 つの時間範囲が重複しているかどうかを調べようとしています。最初の試行で2 つの日付範囲が重複しているかどうかを判断する方法を参照してきましたが、すべてのケースに一致するわけではありません。時間範囲が別の時間範囲の開始時間と終了時間の間にネストされている場合、一致していません。シフトの開始または終了にオーバーラップする場合、またはシフトが完全に一致する場合は、期待どおりに機能します。
私が話していることのこの画像をチェックしてください:
基本的に、オレンジ色のシフトがどこかで赤いシフトと重なっている場合、オレンジ色のシフトを隠そうとしています。これを実現するために使用しようとしているコードの関連部分を次に示します。
if(($red['start'] <= $orange['end']) && ($red['end'] >= $orange['start'])) {
//Conflict handling
}
変数の値は UNIX タイムスタンプです。数字を論理的に調べてみると、上記のステートメントが失敗する理由がわかりました。あるシフトが別のシフトに該当するかどうかを判断するために、より多くのロジックを実行できる方法があることは明らかですが (これが必要になる場合があります)、より普遍的なキャッチを期待していました。
編集:各ブロックの開始時間と終了時間の値を追加します。私が持っているものが機能することに同意します。そうではないという事実は、私の問題があるところです。私はおそらくばかげたことを見落としています。
orange-start = 1352899800
orange-end = 1352907000
red-start = 1352923200
red-end = 1352926200
したがって、私の論理は次のように述べます。
if((1352923200 <= 1352907000) && (1352926200 >= 1352899800))
それに続いて、最初の比較は失敗します。
EDIT 2:私のロジックは正しいようです (私はそう思っていました)。私の問題は、表示されている実際の時間と一致しない UNIX タイムスタンプに関連するものです。私と一緒にこの問題に取り組んでくれた人たちに感謝し、それが問題であることを発見するのを助けてくれました。アンドレイとジェイソンの両方の答えを受け入れることができればいいのにと思います。