新しい PHP DateTime クラスを利用するカレンダー アプリケーションがあります。定期的なイベントを処理する方法はありますが、ハックっぽいので、もっと良いアイデアがあるかどうかを確認したかったのです。
- 2009 年 11 月 16 日 (2009 年 11 月 16 日) に始まる定期的なイベントがあります。
- 3日おきに発生します
- イベントは無期限に繰り返されます
ユーザーが 3100 年 12 月のカレンダーを見たとします。このイベントは、通常どおり 3 日ごとに繰り返されるはずです。問題は、その月の日数をどのように計算するかです。
=========================================
これは私が基本的に行う方法ですが、もっと簡単なものが欠けていることはわかっています。
- $daysDiff として格納されている月の開始日 (3100 年 12 月 1 日) とイベントの開始日 (2009 年 11 月 16 日) の間の日数の差を計算します。
- モジュラスを差し引くと、次のように開始から 3 日の係数が得られます: $daysDiff - ($daysDiff % 3)
- 議論のために、3100 年 11 月 29 日が日付として与えられるとしましょう。
- 次に、すべての日付が 3100 年 12 月以内になるまで、その日付に 3 日を繰り返し追加します。
私の主な問題は、ステップ 1 にあります。PHP の DateInterval::date_diff 関数は、日数の差を計算しません。それは私に何年も何ヶ月も何日も与えるでしょう。2009 年 11 月 16 日 + (1090 年 * 365.25 日) + (9 か月 * 30.5 日) + 15 日
9999 年のように実際に遠い未来に行くと、この見積もりは 1 か月ずれることがあり、必要な場所に到達するには 3 日間の間隔を大幅に差し引く必要があります。