๐๏ธ [DESAFIO] Criando um calendรกrio a partir de um N ano com fรณrmulas matemรกticas.
Calendรกrio por ano
Este รฉ um projeto | desafio que inicie em inspiraรงรฃo a uma publicaรงรฃo no facebook.
https://www.facebook.com/groups/osadpa/permalink/1565130443592477
Referรชncias
Usei como referรชncia o cรกlculo para saber qual รฉ o dia da semana cai qualquer dia, cรกlculo descrito no vรญdeo do Prof. Rafael Procopio do canal Matemรกtica Rio com Prof. Rafael Procopio.
Video: https://www.youtube.com/watch?v=u7NAy_kDZ3A
E usei tambรฉm o cรกlculo do ano bissexto descrito no wikipedia, uma explicaรงรฃo bem detalhada e com exemplos de cรณdigo.
Pagina: https://pt.wikipedia.org/wiki/Ano_bissexto
Cรกlculos
Dia da semana de qualquer dia da histรณria.
$d = 6; //dia
$m = 7; //mes
$a = 1990; //ano
$k = (($d + (2 * $m) + floor((3 * ($m + 1)) / 5) + ($a + floor($a / 4) - floor($a / 100) + floor($a / 400) + 2)) % 7);
Temos tambรฉm de considerar a possibilidade de anos bissexto, para tanto o Prof. Rafael Procopio pede para considerarmos Janeiro e Fevereiro como pertencentes ao ano anterior mas como memes 13 e 14 respectivamente.
$dia = 6; //dia
$mes = 7; //mes
$ano = 1990; //ano
$d = $dia; //dia
$m = (($mes <= 2)? $mes + 12: $mes); //mes
$a = (($mes <= 2)? $ano - 1: $ano); //ano
$k = (($d + (2 * $m) + floor((3 * ($m + 1)) / 5) + ($a + floor($a / 4) - floor($a / 100) + floor($a / 400) + 2)) % 7);
Calculando $k
como descrito no vรญdeo do Prof. Rafael Procopio, e seu resultado รฉ definido usando o seguinte array descrito pelo Porf.
$semanaResultado = [
0 => 'Sabado',
1 => 'Domingo',
2 => 'Segunda',
3 => 'Terรงa',
4 => 'Quarta',
5 => 'Quinta',
6 => 'Sexta',
];
Entretanto nos cรณdigos o dia inicial da semana nรฃo รฉ sรกbado, mas sim domingo, para tanto usei um array para converter o resultado da fรณrmula para o resultado esperado, array:
$resultadoEsperado = [
0 => 6,
1 => 0,
2 => 1,
3 => 2,
4 => 3,
5 => 4,
6 => 5,
];
Com $resultadoEsperado
eu obtia o resultado tendo como Domingo sendo o dia 0 da semana.
Calculo do ano bissexto
$ano = 1990; //ano
$bissexto = (($ano % 400 == 0) || (($ano % 4 == 0) && ($ano % 100 != 0)));
Esse cรกlculo รฉ bem simples e segue uma um algoritmo bem interessante.
- Todo ano divisรญvel por 4 รฉ bissexto.
- Todo ano divisรญvel por 100 nรฃo รฉ bissexto.
- Todo ano divisรญvel por 400 รฉ bissexto.
OBS.: As regras abaixo na lista vale mais que a de cima.
Essas regras concluem que o ano tem 365,2425 dias. Resolvido com a seguinte conta.
365 + (1 / 400) + (1 / 4) - (1 / 100) = 365,2425
Modo de uso
Para usar, รฉ preciso colocar o cรณdigo em um servidor web que use php. depois acessar diretamente o arquivo como:
localhost/calendario-por-ano.php
O script toma como padrรฃo o ano atual para gerar o calendรกrio. Para que ver o calendรกrio de outros anos basta acrescentar uma query na url da seguinte maneira:
localhost/calendario-por-ano.php?ano=1990
ano
serรก o ano que vc quer ver o calendรกrio.
Resultado
O resultado sairรก como no exemplo a seguir:
1990
โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ
โ Janeiro โ โ Fevereiro โ โ Marco โ โ Abril โ
โ โโโโโโโโโโโโโโโโโโโโโฃ โ โโโโโโโโโโโโโโโโโโโโโฃ โ โโโโโโโโโโโโโโโโโโโโโฃ โ โโโโโโโโโโโโโโโโโโโโโฃ
โ D S T Q Q S Sโ โ D S T Q Q S Sโ โ D S T Q Q S Sโ โ D S T Q Q S Sโ
โ โโโโโโโโโโโโโโโโโโโโโฃ โ โโโโโโโโโโโโโโโโโโโโโฃ โ โโโโโโโโโโโโโโโโโโโโโฃ โ โโโโโโโโโโโโโโโโโโโโโฃ
โ 1 2 3 4 5 6โ โ 1 2 3โ โ 1 2 3โ โ 1 2 3 4 5 6 7โ
โ 7 8 9 10 11 12 13โ โ 4 5 6 7 8 9 10โ โ 4 5 6 7 8 9 10โ โ 8 9 10 11 12 13 14โ
โ14 15 16 17 18 19 20โ โ11 12 13 14 15 16 17โ โ11 12 13 14 15 16 17โ โ15 16 17 18 19 20 21โ
โ21 22 23 24 25 26 27โ โ18 19 20 21 22 23 24โ โ18 19 20 21 22 23 24โ โ22 23 24 25 26 27 28โ
โ28 29 30 31 โ โ25 26 27 28 โ โ25 26 27 28 29 30 31โ โ29 30 โ
โ โ โ โ โ โ โ โ
โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ
โ Maio โ โ Junho โ โ Julho โ โ Agosto โ
โ โโโโโโโโโโโโโโโโโโโโโฃ โ โโโโโโโโโโโโโโโโโโโโโฃ โ โโโโโโโโโโโโโโโโโโโโโฃ โ โโโโโโโโโโโโโโโโโโโโโฃ
โ D S T Q Q S Sโ โ D S T Q Q S Sโ โ D S T Q Q S Sโ โ D S T Q Q S Sโ
โ โโโโโโโโโโโโโโโโโโโโโฃ โ โโโโโโโโโโโโโโโโโโโโโฃ โ โโโโโโโโโโโโโโโโโโโโโฃ โ โโโโโโโโโโโโโโโโโโโโโฃ
โ 1 2 3 4 5โ โ 1 2โ โ 1 2 3 4 5 6 7โ โ 1 2 3 4โ
โ 6 7 8 9 10 11 12โ โ 3 4 5 6 7 8 9โ โ 8 9 10 11 12 13 14โ โ 5 6 7 8 9 10 11โ
โ13 14 15 16 17 18 19โ โ10 11 12 13 14 15 16โ โ15 16 17 18 19 20 21โ โ12 13 14 15 16 17 18โ
โ20 21 22 23 24 25 26โ โ17 18 19 20 21 22 23โ โ22 23 24 25 26 27 28โ โ19 20 21 22 23 24 25โ
โ27 28 29 30 31 โ โ24 25 26 27 28 29 30โ โ29 30 31 โ โ26 27 28 29 30 31 โ
โ โ โ โ โ โ โ โ
โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ
โ Setembro โ โ Outubro โ โ Novembro โ โ Dezembro โ
โ โโโโโโโโโโโโโโโโโโโโโฃ โ โโโโโโโโโโโโโโโโโโโโโฃ โ โโโโโโโโโโโโโโโโโโโโโฃ โ โโโโโโโโโโโโโโโโโโโโโฃ
โ D S T Q Q S Sโ โ D S T Q Q S Sโ โ D S T Q Q S Sโ โ D S T Q Q S Sโ
โ โโโโโโโโโโโโโโโโโโโโโฃ โ โโโโโโโโโโโโโโโโโโโโโฃ โ โโโโโโโโโโโโโโโโโโโโโฃ โ โโโโโโโโโโโโโโโโโโโโโฃ
โ 1โ โ 1 2 3 4 5 6โ โ 1 2 3โ โ 1โ
โ 2 3 4 5 6 7 8โ โ 7 8 9 10 11 12 13โ โ 4 5 6 7 8 9 10โ โ 2 3 4 5 6 7 8โ
โ 9 10 11 12 13 14 15โ โ14 15 16 17 18 19 20โ โ11 12 13 14 15 16 17โ โ 9 10 11 12 13 14 15โ
โ16 17 18 19 20 21 22โ โ21 22 23 24 25 26 27โ โ18 19 20 21 22 23 24โ โ16 17 18 19 20 21 22โ
โ23 24 25 26 27 28 29โ โ28 29 30 31 โ โ25 26 27 28 29 30 โ โ23 24 25 26 27 28 29โ
โ30 โ โ โ โ โ โ30 31 โ
โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโ
OBS.: Marรงo aparece sem "รง" pรดs bugava o layout.
Agradecimentos
Agradecimentos ao Cristian Mota por ter crido o post que me incentivou a criar este cรณdigo, agradecimentos ao Prof. Rafael Procopio por seu vรญdeo explicando a fรณrmula, e agradecimentos a wikipรฉdia e seus colaboradores com sua explicaรงรฃo super satisfatรณria sobre o ano bissexto.
A cima coloque o README.md de um "desafio" que me auto coloque enquanto estava navegando pelo Facebook.
Nele me coloque algumas restriรงรตes:
- Nรฃo usaria funรงรตes de data da linguagem;
- Faria as foramulas para calular o que precisava;
- Sua saida tinha de ser um texto corrido;
Com isso em mente consegui obter o resultado deste progeto: rodrigo-dechen/calendario-por-ano
Alguem mais ja se sentio desafiado com algo que alguem tenha postado? Comenta ai! ๐ค