Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

César Boulevar

[Código]Sextas Feiras 13

Recommended Posts

Este código serve para achar as sextas feiras dos respectivos anos :lol:

ps: Código corrido, funcionando !!!

<?php
set_time_limit(0);

fridays( 20 );  //20 anos

function fridays( $anos ){

       $sexta = 0;
       $diasemana = 1;
       $comecar= 1900;

       $mess = array( 'Janeiro' => 31, 'Fevereiro' => ($comecar%4 == 0) ? 29 : 28, 'Marco' => 30, 'Abril' => 31, 'Maio' => 30, 'Junho' => 31, 'Julho' => 30, 'Agosto' => 31, 'Setembro' => 30, 'Outubro' => 31, 'Novembro' => 30, 'Dezembro' => 31 );

       while($comecar < 1900+$anos) {

               foreach( $mess as $mes => $dia ) {

                       for($i = 1;$i <= $dia;$i++ ){
                               $diasemana = ($diasemana == 7) ?  1 : $diasemana+1;

                               if($i == 13 && $diasemana == 5) {
                                       $sexta++;
                                       echo "$i $mes $comecar\r\n";
									echo "<br>";
                               }
                       }
               }
               $comecar++;
       }
	echo "<br>";
       echo "\n\n$sexta sextas-feira 13\r\n";
	echo "<br>";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu código retornou:

 

13 June 1900
13 February 1901
13 March 1901
13 November 1901
13 August 1902
13 May 1903
13 January 1904
13 April 1904
13 July 1904



9 Fridays



0.0022611618041992 seconds

 

 

Ele identifica as sextas-feiras 13?

 

Mas...

 

esse seu código identifica as quartas-feiras 13, não as sextas. E só dos anos 1900-1904.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui retornou

 

13 Setembro 1900 - quinta

13 Dezembro 1900 - quinta

13 Marco 1901 - quarta

...

 

Eu verifiquei algumas datas, todas elas funcioaram.

Bem ja estou indo dormir, mais tarde vejo direito o script, mas de qualquer forma, caso esteja errado dá uma olhada e ve se acha algum erro.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha o meu aí:

 

// ano de inicio
$inicio = 1900;

// número de anos (ex.: vai até 1920
$limite = 20;

// array onde serão armazenadas as sextas feiras
$sextas = array();

for($a = $inicio; $a <= ($inicio+$limite); $a++) {
for($m = 1; $m <= 12; $m++) {
	$diasem = date("l", mktime(0,0,0,$m,13,$a));
	if($diasem == "Friday") {
		$sextas []= "13/{$m}/{$a}";
	}
}
}

var_dump($sextas);

 

Agora iterar assim, verificar dia por dia é f***, bom mesmo é se tivesse um jeito de calcular. Tentei fazer um calculo mas não conseguir achar um padrão. :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

porque tem que iterar todos os dias?

 

basta apenas iterar os meses e anos e usar sempre o dia 13 fixo

 

depois apenas se testa se o dia da semana é sexta

Compartilhar este post


Link para o post
Compartilhar em outros sites

porque tem que iterar todos os dias?

 

basta apenas iterar os meses e anos e usar sempre o dia 13 fixo

 

depois apenas se testa se o dia da semana é sexta

 

Tem razão, Mário. Tremenda burrice minha iterar todos os dias. o código foi corrigido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ficou bem mais simples e o desempenho deve ter ido as estrelas comparado a primeira versão

 

o retorno está correto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

ficou bem mais simples e o desempenho deve ter ido as estrelas comparado a primeira versão

 

o retorno está correto?

 

Se todas as datas estão corretas?

- Eu verifiquei todas de 1900-1920 e algumas outras por amostragem pelo relógio do Windows e pelo site OnlineConversion.com (lá tem que colocar no formato americano, mês antes do dia) e todas batem. Não é possível que tio Bill esteja de sacanagem comigo.

 

Se está realmente pegando todas as sextas-feiras 13?

- Bom, eu estou usado funções do próprio PHP para verificar o dia da semana, se houver alguma sexta-feira 13 que "escapou" então teremos que mandar um bugreport para a Zend.

 

Então a minha resposta a sua pergunta é: SIM.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.