Sollo Imasters 0 Denunciar post Postado Setembro 13, 2010 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
guidjos 65 Denunciar post Postado Setembro 13, 2010 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... Compartilhar este post Link para o post Compartilhar em outros sites
Sollo Imasters 0 Denunciar post Postado Setembro 14, 2010 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
Mário Monteiro 179 Denunciar post Postado Setembro 14, 2010 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
Sollo Imasters 0 Denunciar post Postado Setembro 14, 2010 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 Como assim? Compartilhar este post Link para o post Compartilhar em outros sites
Mário Monteiro 179 Denunciar post Postado Setembro 14, 2010 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
Sollo Imasters 0 Denunciar post Postado Setembro 15, 2010 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
Sollo Imasters 0 Denunciar post Postado Setembro 15, 2010 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
Mário Monteiro 179 Denunciar post Postado Setembro 15, 2010 Que bom que resolveu Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Sollo Imasters 0 Denunciar post Postado Setembro 20, 2010 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