2017-01-05 8 views
2

私はそれを把握することができないので、どんな助けも素晴らしいだろう。クロノスのPHP間隔計算の問題

現在、私は日付時間オブジェクト(例えば '2017-01-05 23:22:27')とユーザーが選択した繰り返し間隔(月曜日(1)と金曜日(5)の間に2日ごとに)例)私は

$dayOfWeek = date("w", time($dateObject->timestamp));

と日時から現在の曜日を取得することができます。しかし、それはそれがためにのために余分に日数を計算する方法外だ場合、私はそれは平日の範囲内だと確認する見当がつかないし、この間隔内で再度日付に追加します。

たとえば、水曜日が4番目の場合は、これを実行した後、6日にdatetimeを戻す必要があります。これを再び実行した後、9日を戻す必要があります。次の日です。それは平日の間隔の中にあります。

私はCakePHP 3とChronosを使用しています。

+0

*火曜日と木曜日の間*のみ1日があります。 –

+0

私は謝罪していませんでした。私はそれを見ていませんでした。より良い例は、月曜日(1)と金曜日(5)の間に2日おきになるため、イベントは月曜日、水曜日、金曜日に発生する必要があります。 – B1scuit

+0

終了日です。しかし、終了日がfridayであると仮定して、ループを行い、$ tmpDate = date($ dateObject-> timestamp、 '+2 day'); '' $ tmpDate'を '> ='平日開始日と終了日の間にあるかどうかをチェックします。 Stevesの解決策は、曜日の整数表現からその日の文字列表現を探している場合です。 –

答えて

1

date("w", time($dateObject->timestamp))の代わりにdate('l',...)を短くした曜日(月、火など)に使用するか、date('d',...)をフルネーム(月曜日、火曜日など)に使用できます。

あなたが毎日に数値を代入している場合は、それぞれを格納する配列を使用します。

$days = array(0 => 'Sunday', 1 => 'Monday', 2 => 'Tuesday', 3 => 'Wednesday', 4 => 'Thursday', 5 => 'Friday', 6 => 'Saturday'); 

あなたは上記のdate()機能で短い名前を使用する場合は、ただの一日を置き換えます代わりに3文字の名前を持つ$days配列の週。

曜日の数値マッピングを使用しているため、条件付き(if/else)ステートメントで0-6を使用して、間隔内にあるかどうかを判断できます。

はここで文字書式と一緒にdate()機能にPHP.netのドキュメントです:PHP.net date() Function