質問

Google の RFC2445 実装を使用しています (http://code.google.com/p/google-rfc-2445/) 繰り返しルールの場合。1 月 30 日から始まる MONTHLY 繰り返しを定義すると、30 日未満の月 (つまり 2 月) は完全にスキップされます。したがって、Google API は 1 月 30 日、3 月 30 日、4 月 30 日などを返します。良くない。私はそれが返されることを期待します:1月30日、2月28日、3月30日、4月30日。

同様に、1 月 31 日の開始日を選択した場合、31 日未満の月はスキップされます。

これは、RFC2445 仕様に従って正しい場合もあれば、バグである場合もあります。どう思いますか?

私の主な質問は、「毎月 30 日に繰り返す」というルールを定義する方法はあるのかということです。または 30 日が存在しない場合は月の末日。」そんなことはないと思います。助言がありますか?

前もって感謝します。

よろしく、コーマック

役に立ちましたか?

解決

答えは:= MONTHLY FREQ; BYMONTHDAY = 28,29,30; BYSETPOS = -1に変換「毎月30日に再発、または月の最終日30日が存在しない場合は」ます。

他のヒント

RFC がこれらの日付をスキップしているという意見は正しいようです。もしあなたの DTSTART は 1 月 31 日ですが、日付を指定しません BYMONTHDAY 繰り返しルールで (または BYMONTHDAY が 31 日である場合)、そのような日がない月は単純にそのルールを無視します。

利用可能な範囲を超えているBYXXXルールパーツの値が見つかった場合(つまり、2月にbymonthday = 30)、それらは単に無視されます。

しかし, に -1 を指定できるはずです。 BYMONTHDAY そして、それが何であれ、月の最終日を使用するようにします。

bymonthdayルールパーツは、月の日のリストを分離したコンマ文字(ASCII 104)を指定します。有効な値は 1 ~ 31 または -31 ~ -1 です。たとえば、-10はその月の最終日から10番目を表します。

scroll top