私はこれについて少なくとも20のトピックを調べましたが、まだ良い答えは見つかりませんでした。そこで、繰り返しイベントの恐ろしいトピックに関する答えをもう一度尋ねに来ます。
今のところ、Daily、Weekly、Monthly、Yearlyの繰り返しがうまく機能しています(例外イベントなどでシステムを刷新する必要がありますが、当面は機能します)。ただし、毎月、隔月の(1日、2日、3日、4日、5日)[日|月|火|水|木|金|土]にイベントを繰り返す機能を追加できるようにしたいと考えています。そして3ヶ月ごと。
さて、毎月の論理を理解できれば、隔月と3か月ごとに理解できます。
これまでのところ、これが少しです(注:私がそれを行うための最善の方法があると言っているわけではありませんが、システムは、他のプロジェクトで忙しくないときに時間の経過とともに非常にゆっくりと更新されるシステムです。時間があるので、コードをより効率的にします)。
まず、日付計算用にフォーマットされた開始日と終了日を取得します。
$ending = $_POST['end_month'] . "/" . $_POST['end_day'] . "/" . substr($_POST['end_year'], 2, 2);
$starting = $_POST['month'] . "/" . $_POST['day'] . "/" . substr($_POST['year'], 2, 2);
次に、これら2つの違いを取得して、しばらく前にここで見つけた関数を使用して何回繰り返すかを知り、その量を28日で割って、繰り返す必要のある回数を取得します。月に1つあります:
$repeat_number = date_diff($starting, $ending) / 28;
//find the difference in DAYS between the two dates
function date_diff($old_date, $new_date) {
$offset = strtotime($new_date) - strtotime($old_date);
return $offset/60/60/24;
}
次に、(1st、2nd、etc ...)の部分を[Sun | Mon | etc ...]の部分に追加して、「最初の日曜日」のようなものを私に与えてくれるものを探していることを理解します。
$find = $_POST['custom_number']. ' ' . $_POST['custom_day'];
次に、これを繰り返す必要がある回数(上記の$ repeat_number)を実行するループを使用します。
for($m = 0; $m <= $repeat_number; $m++) {
if($m == 0) {
$month = date('F', substr($starting,0,2));
} else {
$month = date('F', strtotime($month . ' + ' . $m . ' months'));
}
$repeat_date = strtotime($find . ' in ' . $month);
}
今、私はこのコードが機能しないことを知っています、私はかつて繰り返しのために正しい月と年を上げたコードを持っていましたが、必ずしも最初の火曜日またはそれが探していたものを見つけるとは限りませんでした。
誰かが私を正しい方向に向けることができれば、それは最もありがたいです。私はしばらくの間コミュニティに潜んでいて、最近積極的に参加しようとし始めました。
ご意見やアドバイスをよろしくお願いいたします。