fev 8 2011

Calcular Feriados Móveis

Se você sempre quis saber como as datas do carnaval, da páscoa são decididas. Seus problemas acabaram, irei demonstrar um exemplo que fiz em PHP, que serve para calcular feriados móveis e espero implementar em outras linguagens, que utiliza a fórmula de Gauss, para ser mais exato, Karl Friederich Gauss, um Matemático Alemão.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
 
<title>Fórmula de Gauss para verificar feriados móveis</title>
 
<form method="post" action="<?php echo $PATH_INFO; ?>">
Digite o ano em que para saber os feriados:<input type="text" name="ano" size="4"><br />
<input type="submit" value="Verificar">
</form>
 
<?php
date_default_timezone_set('America/Sao_Paulo'); //para evitar os warnings do php
 
function SomarData($data, $dias, $meses, $ano)
{
   $data = explode("/", $data);
   $newData = date("d/m/Y", mktime(0, 0, 0, $data[1] + $meses,
     $data[0] + $dias, $data[2] + $ano) );
   return $newData;
}
 
function gauss($ano){
//Lembrando que existem várias fórmulas para se calcular, mas a mais simples é a de Gauss
//Karl Friederich Gauss foi um Matemático Alemão, graças a ele temos isso ;)
//lembrando que não tratei as excessões dos anos 2049 e 2076
	switch ($ano) {
	case ($ano >= 1582) && ($ano <= 1699): $x=22; $y=2; break;
	case ($ano >= 1700) && ($ano <= 1799): $x=23; $y=3; break;
	case ($ano >= 1800) && ($ano <= 1899): $x=24; $y=4; break;
	case ($ano >= 1900) && ($ano <= 2099): $x=24; $y=5; break;
	default: echo 'Erro: Somente até o ano 2099!';
	}
 
	if(isset($x)){
	$a = $ano % 19;
	$b = $ano % 4;
	$c = $ano % 7;
	$d = (19 * $a + $x) % 30;
	$e = (2 * $b + 4 * $c + 6 * $d + $y) % 7;
 
	if((22 + $d + $e) > 31)
        	$domingo_pascoa = (string)($d + $e - 9).'/'.'04/'.$ano;
    	else
        	$domingo_pascoa = (string)(22 + $d + $e).'/'.'03/'.$ano;
 
return $domingo_pascoa;
				}
}
 
$ano_teste = $_POST['ano'];
 
if(isset($ano_teste)){
 
   echo 'Domingo de Pascoa: '.gauss($ano_teste).'<br />';
   echo 'Sexta Feira da Paixao: '.SomarData(gauss($ano_teste),-2,0,0).'<br />';
   echo 'Terca Feira de Carnaval: '.SomarData(gauss($ano_teste),-47,0,0).'<br />';
   echo 'Quarta-Feira de Cinzas: '.SomarData(gauss($ano_teste),-46,0,0).'<br />';
   echo 'Corpus Christi: '.SomarData(gauss($ano_teste),60,0,0);
 
   }
 
?>
TAGS:


1 Comentários:

Trackbacks

  1. Óculos de Sol diz:
    Show! Muito útil, valeu a dica!
    março 1st, 2011 às 11:23 am

DEIXE UM COMENTÁRIO

Subscrever

Subscreve o Blog



Publicidade

Comentários Recentes

  • Carlos André: Bom dia, sou Carlos Técnico em Meio ambiente, estamos usando o cimento Cauê CPII E 32 em nossa obra...
  • Marcos Antônio dos Santos: Quero ganhar uma antena
  • maria luiza moreira dias: quero participar desse quadro porque meu carro precisa de uma reformação
  • Regina lucia: Estou gostando dessa oportunidade que este cartao esta oferecendo pra nos
  • shirley Balazs: Parabéns!! Informações de utilidade publica e de primeira, foi muito útil a mim.Obrigada!!

Links

Leitores Recentes

VALE O CLIQUE!

Site Seguro Ocioso

Divulgue o blog Infomaroto em seu site e tenha seu link ou banner aqui.
Blog Infomaroto