Predefinição Discussão:Móvel

O conteúdo da página não é suportado noutras línguas.
Adicionar tópico
Origem: Wikipédia, a enciclopédia livre.

Sintaxe[editar código-fonte]

Parâmetros necessários[editar código-fonte]

1: ano

2: mês

3: número de ordem (primeiro, segundo, etc). Para o último do mês usar 0; para o quinto do mês, com mensagem de erro caso não exista, usar 100

4: dia da semana especificado (seg=2, ter=3,..., sab=7, dom=1)

5: dia a partir do qual a contagem é feita (facultativo)

n = parâmetro livre: n dias depois de um determinado dia

d = parâmetro livre: o dia da semana seguinte ao um determinado domingo (segunda-feira=2,...). Equivalente a n-1

ano=1: inclui o ano (facultativo)

O mês de setembro de 2020 é mostrado ao lado para comparação (não faz parte da predefinição)

setembro
sem S T Q Q S S D
36   1 2 3 4 5 6
37 7 8 9 10 11 12 13
38 14 15 16 17 18 19 20
39 21 22 23 24 25 26 27 
40 28 29 30        
  • {{móvel|2020|9|1|3|ano=1}} ano 2020, 9º mês, primeira terça-feira: 1 de setembro de 2020
  • {{móvel|2020|9|0|1}} ano 2020, 9º mês, último domingo: 27 de setembro
  • {{móvel|2020|9|1|2|13}} ano 2020, 9º mês, primeira segunda-feira depois do dia 13: 14 de setembro
  • {{móvel|d=2|2020|9|1|1}} segunda-feira depois de ano 2020, 9º mês, primeiro domingo: 7 de setembro
  • {{móvel|n=2|2020|9|1|2}} dois dias depois de ano 2020, 9º mês, primeira segunda-feira: 9 de setembro
  • {{móvel|2020|9|5|4}} ano 2020, 9º mês, quinta quarta-feira: 30 de setembro
  • {{móvel|2020|9|5|5}} ano 2020, 9º mês, quinta quinta-feira: 1 de outubro
  • {{móvel|2020|9|100|4}} ano 2020, 9º mês, quinta quarta-feira, sem mudança de mês: 30 de setembro
  • {{móvel|2020|9|100|5}} ano 2020, 9º mês, quinta quinta-feira, sem mudança de mês: Não existe neste mês

Primeira semana do mês[editar código-fonte]

O algoritmo usado consiste na determinação do dia da semana do dia da partida ("dia zero") e adição de um número calculado pelo algoritmo, obtendo-se o "dia alvo"

  • j \d\e F corresponde ao formato de representação da data

O modo de representar os dias da semana nesta predefinição é mais adequados ao mundo lusófono, onde a etiqueta 2 corresponde à 2ª-feira, 3ª à terça, etc, mas a representação para a função #time 0 representa o domingo, 1 representa a segunda-feira etc...

A expressão

{{#time:w|{{{1}}}-{{{2}}}-{{{5|0}}}} (representada como A abaixo)

devolve a etiqueta (w) correspondente ao dia da semana (w(domingo)=0) do dia zero, fornecido pelo parâmetro {{{5}}}, que tem o valor por defeito de 0 correspondente ao último dia do mês anterior.

Se as etiquetas fossem equivalentes, para saber a data correspondente a um determinado dia da semana bastaria subtrair a etiqueta do dia da semana pretendido à etiqueta correspondente ao dia de partida. Exemplo: Se o dia zero for uma terça-feira (w=2) e se pretende saber qual a quinta-feira seguinte (w=4) basta fazer:

  • 4-2=3→ O dia 2 é a quinta feira seguinte.

Generalizando, seria em pseudocódigo:

  • {{{4}}}-A

O cálculo anterior pode dar números negativos. Por isso, deve adicionar-se 7 para que o resultado dê um resultado depois do dia zero. Para evitar números maiores do que 7 (logo, na semana errada) usa-se a função mod7:

  • ({{{4}}}+7-A)mod7

Como há uma desfasagem entre as etiquetas de {{Móvel}} (2→segunda) e #time(2→terça) é necessário subtrair 1 ao argumento da função mod7:

  • ({{{4}}}+6-A)mod7

Deste modo, a função mod7 dá resultados de 1 a 6 corretos, mas continua a dar 0, quando o resultado pretendido é suposto ser 7. A situação resolve-se por subtrair 1 ao argumento da função e recolocá-lo fora da função, obtendo-se a expressão final para a primeira semana do mês:

  • ({{{4}}}+5-{{#time:w|{{{1}}}-{{{2}}}-{{{5|0}}}}})mod7+1

Outras semanas do mês[editar código-fonte]

A generalização às outras semanas do mês consiste em adicionar 7×{{{3}}}-7 ao resultado anterior.

5ª semana do mês[editar código-fonte]

Duas situações podem acontecer quando nos referimos, por exemplo, ao quinto domingo do mês:

  • Não importa que esse dia calhe no mês seguinte, com a data festiva a realizar-se sempre. Neste caso, o algoritmo já descrito não apresenta problemas, sendo usado o valor de 5 para o parâmetro {{{3}}}
  • A data festiva só se realiza, se o quinto domingo existir de facto. Para tal, o algoritmo precisa de decidir se o dia alvo é de facto o quinto domingo do mês, caso contrário a data festiva não existe. Neste caso, é usado o valor de 100 para o parâmetro {{{3}}}. Assim, algoritmo determina a data do dia alvo e compara-a com o número de dias do mês ({{#time: t|{{{1}}}-{{{2}}}-1 }} (o parâmetro t devolve o número de dias do mês em questão.) Se o valor for superior, o algoritmo devolve o resultado: Não existe neste mês.

Última semana do mês[editar código-fonte]

Uma data festiva que se realize, por exemplo, no último domingo do mês, não pode ser determinada com algoritmo descrito até agora, porque este não é capaz de decidir se o último domingo é o quarto ou o quinto domingo do mês. Neste caso, é usado o valor de 0 para o parâmetro {{{3}}}. Como no caso anterior, o algoritmo determina o quinto domingo do mês e compara-o com o número de dias do mês. Se o valor for inferior, esse é o dia alvo. Caso contrário, dever-se-á subtrair 7 ao valor obtido, para passar para a semana anterior.

Outros casos[editar código-fonte]

  • Por vezes, a definição da data de uma celebreação não se baseia na 1ª ou 2ª terça-feira do mês, mas na segunda-feira seguinte ao dia 3, por exemplo. Para tal, basta inserir o valor do dia zero no parâmetro facultativo {{{5}}}.
  • Para preceitos mais complexos, como terça-feira a seguir ao primeiro domingo, os parâmetros {{{d}}} ou {{{n}}} devem ser utilizados.

No exemplo dado determina-se o primeiro domingo do mês e depois altera-se o resultado, de modo a obter o dia alvo desejado. O parâmetro {{{d}}} corresponde à etiqueta do dia da semana (como 2→segunda-feira), usando o domingo como partida (só funciona neste caso). O parâmetro {{{n}}} é o número de dias que é necessário adicionar, onde a quinta-feira seguinte a uma determinada terça-feira corresponde ao valor {{{n}}}=2 (dois dias depois).