سؤال

أنا أستخدم تطبيق Google RFC2445 (http://code.google.com/p/google-rfc-2445/) لقواعد التكرار.إذا قمت بتحديد تكرار شهري بدءًا من 30 يناير، فسيتم تخطي الأشهر التي تقل مدتها عن 30 يومًا (أي فبراير) تمامًا.لذلك ستعود واجهة برمجة تطبيقات Google في 30 يناير، و30 مارس، و30 أبريل، وما إلى ذلك.ليس جيدا.أتوقع عودته:30 يناير، 28 فبراير، 30 مارس، 30 أبريل.

وبالمثل، إذا اخترت تاريخ البدء في 31 يناير، فسيتم تخطي أي أشهر تقل مدتها عن 31 يومًا.

قد يكون هذا صحيحًا وفقًا لمواصفات RFC2445 أو قد يكون خطأً.ماذا تعتقد؟

سؤالي الرئيسي هو، هل هناك أي طريقة لتحديد القاعدة التي تنص على "تتكرر في اليوم الثلاثين من كل شهر؛أو اليوم الأخير من الشهر إذا لم يكن اليوم الثلاثين موجودا".لا أعتقد أن هناك.أي اقتراحات؟

شكرا لك مقدما.

التحيات ، كورماك

هل كانت مفيدة؟

المحلول

والجواب هو: FREQ = الشهرية، BYMONTHDAY = 28،29،30، BYSETPOS = -1 والتي تترجم إلى "تتكرر على 30 من كل شهر، أو في اليوم الأخير من الشهر إذا كان 30 غير موجود" .

نصائح أخرى

يبدو أنك على حق بشأن تخطي RFC لهذه التواريخ.إذا كان لديك DTSTART هو 31 يناير، ولم تحدد أ BYMONTHDAY في قاعدة التكرار الخاصة بك (أو إذا BYMONTHDAY في اليوم الحادي والثلاثين)، فسوف يتجاهل ببساطة هذه القاعدة خلال الأشهر التي لا يوجد فيها مثل هذا اليوم:

إذا تم العثور على قيم جزء قاعدة قاعدة BYXXX والتي تتجاوز النطاق المتاح (أي ، bymonthday = 30 في فبراير) ، يتم تجاهلها ببساطة.

لكن, ، يجب أن تكون قادرًا على تحديد -1 لـ BYMONTHDAY واجعله يستخدم اليوم الأخير من الشهر، مهما حدث.

يحدد جزء قاعدة Bymonthday حرف فاصلة (ASCII Decimal 44) قائمة من أيام الشهر.القيم الصالحة هي من 1 إلى 31 أو -31 ​​إلى -1.على سبيل المثال ، يمثل -10 العاشر إلى آخر يوم من الشهر.

حسنا، وتبحث في RFC 2445 نفسه يبدو بالتأكيد أن السلوك الذي " إعادة رؤية صحيحة:

<اقتباس فقرة>   

إذا تم العثور على قيم جزء حكم BYxxx التي هي خارج نطاق متاح (أي BYMONTHDAY = 30 في فبراير)، وتجاهلها ببساطة.

والحل الوحيد الذي يمكنني أن أفكر في استخدام قواعد تكرار متعددة، أي واحد ل30 من كل شهر وآخر لليوم الأخير في فبراير شباط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top