Ir para conteúdo

POWERED BY:

Arquivado

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

Sollo Imasters

[Resolvido] Número da Semana

Recommended Posts

Olá pessoal!

 

Estou precisando fazer um algoritmo para calcular o número da semana corrente.

 

Tinha pensado nisso:

recebe data(dd/mm/aaaa);

dias = 0;

switch mm;
case 1
dias = 0;
break;

case 2
dias = 31;
break;

case 3
dias = 59;
break;

case 4
dias = 90;
break;

case 5
dias = 120;
break;

case 6
dias = 151;
break;

case 7
dias = 181;
break;

case 8
dias = 212;
break;

case 9
dias = 243;
break;

case 10
dias = 273;
break;

case 11
dias = 304;
break;

case 12
dias = 334;
break;

dias =+ dd;

semana = (dias/7);

O problema está na divisão final, pois, o ano possui 53 semanas sendo que a primeira, ou última ou ambas não é completa. Assim o resultado é sempre fracionado.

 

Alguém tem alguma sugestão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por que não pegar o número de dias total e dividir por 7? Se o resto for 0, o número da semana é o resultado da divisão. Se for > 0, é o resultado + 1...

 

Nem sempre funciona assim. Por exemplo:

 

dia 13/09/2010 = 256/7 = 36,57

 

O que nos levaria para 37ª semana, certo?

 

ERRADO!

 

13/09/2010 está na 38ª semana de 2010, entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade a conta é basicamente essa só que precisa sempre analisar em que dia da semana caiu 1/1 e fazer os ajustes para os demais

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simples

 

Apenas verifique o dia da semana do dia 1/1

 

No caso do ano atual é sexta (6) ou seja para completar a semana faltam 5 dias (de domingo a quinta)

 

Com isso precisa primeiramente somar este 5 com o numero do dia e fazer a divisao por 7 da mesma forma que fez

 

Se der exata é a semana, senão arredonde para mais

 

No caso de ontem, o dia era 256

 

Somamos os 5 e temos 261

 

Dividindo por 7 temos 37,285714285714285714285714285714

 

Ou seja semana 38

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simples

 

Apenas verifique o dia da semana do dia 1/1

 

No caso do ano atual é sexta (6) ou seja para completar a semana faltam 5 dias (de domingo a quinta)

 

Com isso precisa primeiramente somar este 5 com o numero do dia e fazer a divisao por 7 da mesma forma que fez

 

Se der exata é a semana, senão arredonde para mais

 

No caso de ontem, o dia era 256

 

Somamos os 5 e temos 261

 

Dividindo por 7 temos 37,285714285714285714285714285714

 

Ou seja semana 38

 

Agora saquei!

 

Valeu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Edit:

 

A solução bruta:

 

<?php

$dia = date("d");
$mes = date("m");
$ano = date("Y");
$week = date("w");
$mesEmDias = 0;
$totalDias = 0;
$numSemana = 0;

switch ($mes) {
    case "1":
        $mesEmDias = 0;
        break;
    case "2":
        $mesEmDias = 31;
        break;
	case "3":
        $mesEmDias = 59;
        break;		
	case "4":
        $mesEmDias = 90;
        break;
	case "5":
        $mesEmDias = 120;
        break;
	case "6":
        $mesEmDias = 151;
        break;
	case "7":
        $mesEmDias = 181;
        break;		
	case "8":
        $mesEmDias = 212;
        break;		
	case "9":
        $mesEmDias = 243;
        break;
	case "10":
        $mesEmDias = 273;
        break;
	case "11":
        $mesEmDias = 304;
        break;		
	case "12":
        $mesEmDias = 334;
        break;		
}

$totalDias = ($mesEmDias + $dia + $week);

$numSemana = ($totalDias/7);
		
echo "Estamos na semana " . ceil($numSemana) . " de $ano." ;

?>

Vou refinar o algoritmo, mas a idéia central está pronta... ;)

 

Obrigado aos que ajudaram!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que bom que resolveu

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que bom que resolveu

 

Abraços

 

Deu pau!

 

Quando o dia da semana ($week)é baixo não dá certo.

 

Semana passada foi a semana 38 até sábado, porém, o resultado desse algoritmo que fiz para sábado é 39.

 

Por outro lado o domingo era semana 39, e o resultado foi 38.

 

Dependendo do valor de $week, até certo ponto o algorítmo dá certo... :(

 

Edit:

 

Como estou usando php, descobri que já existe uma função que retorna o número da semana: date("W"), que é diferente da date("w").

 

Então, não vou precisar reinventar a roda...hehehe

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.