textualización repeticion reglas recurrencia elipsis ejemplos definicion calendar rule recurrence rfc2445

calendar - repeticion - reglas de textualización definicion



Pregunta de definición de regla de recurrencia(RFC2445) (3)

Parece que tienes razón sobre el RFC omitiendo esas fechas. Si su DTSTART es el 31 de enero y no especifica un BYMONTHDAY en su regla de recurrencia (o si BYMONTHDAY es el día 31), simplemente ignorará esa regla en los meses en que no haya tal día:

Si se encuentran valores de parte de regla BYxxx que están más allá del alcance disponible (es decir, BYMONTHDAY = 30 en febrero), simplemente se ignoran.

Sin embargo , debe poder especificar -1 para BYMONTHDAY y hacer que use el último día del mes, cualquiera que sea.

La parte de regla BYMONTHDAY especifica un carácter COMMA (ASCII decimal 44) lista separada de días del mes. Los valores válidos son de 1 a 31 o de -31 a -1. Por ejemplo, -10 representa el décimo hasta el último día del mes.

Estoy usando la implementación de RFC2445 de Google ( http://code.google.com/p/google-rfc-2445/ ) para ver las reglas de recurrencia. Si defino una recurrencia MENSUAL a partir del 30 de enero, los meses con menos de 30 días (es decir, febrero) serán salteados por completo. Entonces, la API de Google regresaría el 30 de enero, el 30 de marzo, el 30 de abril, etc. No es bueno. Esperaría que volviera: 30 de enero, 28 de febrero, 30 de marzo, 30 de abril.

De manera similar, si seleccioné una fecha de inicio del 31 de enero, se omitirán todos los meses con menos de 31 días.

Esto puede ser correcto según la especificación RFC2445 o puede ser un error. ¿Qué piensas?

Mi pregunta principal es si hay alguna forma de definir una regla que diga "se repita el día 30 de cada mes o el último día del mes si el día 30 no existe". Yo no creo que exista. ¿Alguna sugerencia?

Gracias por adelantado.

Saludos, Cormac


La respuesta es: FREQ = MES; BYMONTHDAY = 28,29,30; BYSETPOS = -1, que se traduce como "recurrir el 30 de cada mes, o el último día del mes si el 30 no existe".


Bueno, mirando RFC 2445 en sí mismo, definitivamente parece que el comportamiento que estás viendo es el correcto:

Si se encuentran valores de parte de regla BYxxx que están más allá del alcance disponible (es decir, BYMONTHDAY = 30 en febrero), simplemente se ignoran.

La única solución que se me ocurre es utilizar múltiples reglas de recurrencia, es decir, una para el 30 de cada mes y otra para el último día de febrero.