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

  • shirley Balazs: Parabéns!! Informações de utilidade publica e de primeira, foi muito útil a mim.Obrigada!!
  • Jefferson Ferreira de brito: eu quero muito
  • thiago valente: Eu quero um para mim
  • Lucas martins balieiro: Eu não fiz o enem mesmo assim eu posso me inscrever no site essa é minha dúvida, só queme...
  • Francisca Marli Oliveira: quero saber quanto tenho no meu fgts

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