2016-07-20 5 views
1

私は、MySQLに由来する日付範囲を持っています。たとえば、 2016-01-05から2016-01-10です。土曜日と日曜日の両方がその日付範囲内にあるかどうかを確認したいと思います。必ずしも連続している必要はありません。これまでのところ私が発見した:日付範囲に週末が含まれていることを確認するにはどうすればよいですか?

function isWeekend($date) { 
    return (date('N', strtotime($date)) >= 6); 
} 

だから私はそれが週末の日だかどうかを確認するために範囲内で毎日のためにループする必要があります。

もっと良いアプローチはありますか?

+1

日付は常に7日より短くなっていますか? – Ares

+0

@Ares場合によっては、日付は任意の長さにすることができます。 – reddish

答えて

1

すべての日をループする必要はありません。あなたは、日付範囲の長さと最初の曜日の曜日を知る必要があります。範囲の長さを加えた開始日の数値の曜日が大きい場合は土曜日と日曜日をチェックすることによって、日付範囲に含まれているかどうかを判断することができます

$start = new DateTime('2016-01-05'); 
$end = new DateTime('2016-01-10'); 

:あなたは2つのDateTimeオブジェクトを持っていると仮定すると

6.

function includes_weekend (DateTime $start, DateTime $end) { 
    return $start->diff($end)->format('%a') + $start->format('w') > 6; 
} 

format('%a')戻っ合計diffによって返さDateIntervalの日数、およびformat('w')リターン週の数値日(スンダよりy = 0)。

0

毎日確認する必要はありません。

私は平易な英語でこれを説明しようとするでしょう:

まず、それは週末に起動するかどうかを確認します。もしそうなら、あなたはすでに終わっています。期間が6日を超える場合は、すぐに「はい」とみなし、週末の日が含まれていると見なすことができます。それが5日の場合、最初の日であるは、月曜日になるととなります。それ以外の場合は、週末の日が含まれます。それが4の場合は、となって火曜日になるなど...

+0

ご返信ありがとうございますが、あなたのロジックに欠陥があります。私の日付範囲が土曜日に始まり火曜日に終わる場合、最初の日は月曜日になりません。 – reddish

+0

すみません、私は明確にすべきでした。最初の日をチェックして週末かどうかを確認してください。エッジケースを排除する必要があります。 – Ares

関連する問題