Pergunta

Eu estou usando a implementação RFC2445 do Google ( http://code.google. com / p / google-RFC-2445 / ) para regras de recorrência. Se eu definir uma recorrência mensal começando no dia 30 de janeiro de meses com menos de 30 dias (ou seja, de fevereiro) será totalmente ignorada. Portanto, a API do Google retornaria 30 de janeiro, 30 de março de 30 de abril, etc. Não é bom. Eu esperaria que ele retorne:. 30 de janeiro, 28 de fevereiro, 30 de março, 30 de abril

Se eu escolhi uma data de início de 31 de Janeiro, então qualquer meses com menos de 31 dias seria ignorado.

Esta pode estar correto conforme a especificação RFC2445 ou pode ser um bug. O que você acha?

A minha pergunta principal é, há alguma maneira de definir uma regra que diz que "recorrência no dia 30 de cada mês, ou o último dia do mês se o 30º não existe". Eu não acredito que existe. Alguma sugestão?

Agradecemos antecipadamente.

Saudações, Cormac

Foi útil?

Solução

A resposta é: FREQ = mensais; BYMONTHDAY = 28,29,30; bysetpos = -1 que se traduz em "recorrência no dia 30 de cada mês, ou o último dia do mês se o 30º não existe" .

Outras dicas

Parece que você está certo sobre o RFC pular essas datas. Se o seu DTSTART é 31 de janeiro, e você não especificar um BYMONTHDAY em sua regra de recorrência (ou se BYMONTHDAY é no dia 31), então ele vai simplesmente ignorar essa regra em meses onde não existe tal dia:

Os valores regra parte Se BYxxx são encontrados que estão fora do escopo disponíveis (Ou seja, BYMONTHDAY = 30 em Fevereiro), eles são simplesmente ignoradas.

No entanto , você deve ser capaz de especificar -1 para BYMONTHDAY e tê-lo usar o último dia do mês, o que quer que pode acontecer de ser.

A regra BYMONTHDAY especifica Parte A caractere vírgula (ASCII decimal 44) lista separada de dias do mês. Os valores válidos são de 1 a 31 ou -31 a -1. Por exemplo, -10 representa o décimo ao último dia do mês.

Bem, olhando para RFC 2445 -se, definitivamente, parece que o comportamento que você' seeing re está correto:

Se os valores de peças regra BYxxx são encontrados que estão além do escopo disponíveis (ou seja, BYMONTHDAY = 30 em fevereiro), eles são simplesmente ignorados.

A única solução que eu posso pensar é usar várias regras de recorrência, ou seja, um para o dia 30 de cada mês e outro para o último dia de fevereiro.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top