Jump to content
Fórum Script Brasil
  • 0

Trabalhando com DATAS, dividir o ano em semanas, e semanas em dias


marcosfj1

Question

Seguinte galera, preciso fazer um trabalho com datas que é um pouco complicado.

Preciso pegar o ano em que estamos dividir eles em semanas, exemplo

2011 tem 50 semanas

semana 1 - 01/01/2011 a 07/01/2011

E por ai vai ate o final do ano

Eu preciso disso porque, depois o intervalo da semana os dias

01, 02, 03, 04, 05, 06, 07

Vou usar eles para fazer um busca SQL e encontrar valores diarios, tipo:

SELECT valor_total
FROM cliente
WHERE DAYS = $dia
MOUTH = $mes
YEAR = $ano

Sendo assim eu teria que dividir o ano em semanas, e pegar as informações de cada dia e joga-las nas variaveis $dia, $mes, $ano para poder trabalhar com elas na busca, e assim trazer os resultados corretos para cada dia daquela semana.

Meu problema é que:

1º = estou com um pouco de dificuldade na lógica, então me desculpe se não fui muito claro no que quero fazer

2º = preciso achar uma função que primeiro divida o ano nas semanas corretas

3º = dividir aquela semana encontrada em dias, e joga-las nas variaveis

alguém sabe me dar uma luz de por onde comecar?

Obrigado

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

amigo, já viu a funcao date do php?

Lá ela te da varios valores, tais como o dia e nome do dia da semana.

Começe estudando ela, depois você verá que para um mês (maio), começando dia 1 como domingo, a funcao vai ser:

1 + 7 = domingo

8 + 7 = domingo

15+ 7 = domingo

22 + 7 = domingo

29 + 7 = domingo

se domingo > 30, 30 (referente aos dias da semana) - 29 + 7 = domingo do mes 2 (junho) e dia 6.

Ai, você cria uma variavel que divide o ano (12 meses) por 2. Todos os pares são 30 e os impares são 31, exceto fevereiro que é 28 ou 29

Link to comment
Share on other sites

  • 0

Opa amigo agradeco ter respondido...sinceramente ainda to perdido, mesmo com esta curta explicação que me deu, não consigui etender o calculo a ser feito....mas estou dando um olhada na função date() que me passou, já conhecia ela, mas somente o basico

Com ela eu já vi que da pra pegar quantas semanas tem o ano, porem eu preciso de mais que isso

Achei um exemplo na net, porém esta em ASP e não tenho ideia de como passar para PHP........mas o exemplo mostra exatamente como eu gostaria que fosse

Exemplo

Da forma como esta no exemplo ele mostra o ano dividido em semanas, e de que dia a que dia vai cada semana, que é o q eu quero.

Se puder ser um pouco mais claro quantos aos caminhos q tenho q tomar e a logica a seguir eu agradeceria

Valeu

Link to comment
Share on other sites

  • 0

Cara o código esta se comportando como eu te flei, mas em asp ^^

traduzindo pro php:

<?

$var_yr = "2006";

$inicio_ano = "1/1/$var_yr";

$final_ano = "31/12/$var_yr";

$semana = 0;

$var_d1 = date("j");

while ($inicio_ano < $final_ano) {

if ($var_d1 <> 1){

$var_dt = 7 - $var_d1;

} else {

$var_dt = 6

}

if (($var_d1 + $var_dt) > $var_df){

$var_d2 = $var_df;

$semana=$semana + 1;

} else {

$var_d2 = $var_d1 + $var_dt;

$semana=$semana + 1;

}

echo "semana $semana - de $var_d1 a $var_d2 <br>";

$var_d1 = $var_d2 + 1;

?>

Creio que vai ter varios erros, mas assim fica melhor para comecar a entender

Edited by beuleal
Link to comment
Share on other sites

  • 0

Bom primeiro obrigado por estar tentando me ajudar....em 4 foruns q participo você é a unica pessoa que ta se aproximando do que realmente quero

Seguindo as modificações que você fez no codigo para PHP eu corrigi os erro e estou com o seginte codigo no momento:

$var_yr = "2011";
        $inicio_ano = "1/1/".$var_yr."";
        $final_ano = "31/12/".$var_yr."";
        $semana = 0;
        $var_d1 = date("d");

        if($inicio_ano < $final_ano) {
        
            if ($var_d1 != 1){
                $var_dt = 7 - $var_d1;
            } else {
                $var_dt = 6;
            }

            if (($var_d1 + $var_dt) > $var_df){
                $var_d2 = $var_df;
                $semana=$semana + 1;
            } else {
                $var_d2 = $var_d1 + $var_dt;
                $semana=$semana + 1;
            }
            echo "De ".$var_d1." a ".$var_d2." <br>";
            $var_d1 = $var_d2 + 1;
            
        }

Primeiro problema foi que com o WHILE não aprecia nada na tela....simplesmente ficava em branco, ai troquei por IF........o problema disso é que só mostro um resultado no echo, não ficando a lista de semanas como eu queria igual do site la

Segundo, no codigo em ASP $var_df tinha um valor, já nesse que passou pro PHP, não existe valor, logo a variavel $var_d2 não tem valor....o que atrapalha toda a conta e não deixa mostrar o ECHO corretamente.

Na verdade cara o que to preciando é quase isso, em uma variavel manter o inicio da semanae a na outra o final....isso porque depois eu vou usar estas variaveis numa consulta SQL, onde vou trazer a somatoria dos pedidos feitos em cada um daqueles dias.....MAS primeiro preiso das variaveis para delimitar a semana

Valeu

Link to comment
Share on other sites

  • 0

Amigo obtive grandes resultados, porem com uma variavel pré estipulada. veja os codigos:

<?

$ano = "2011";
$mes = 1;
$semana = 0;

$dia_i = 34; //corresponde ao dia 1 de janeiro e primeiro dia da semana
$dia_f = 1; //corresponde a uma semana apos o dia 1

$inicio_ano = "1/1/".$ano."";
$final_ano = "31/12/".$ano."";

$var_yr = "2011";
$var_d1 = "1/1/$var_yr";
$var_df = "31/12/$var_yr";

/*
1 + 7 = domingo
8 + 7 = domingo
15+ 7 = domingo
22 + 7 = domingo
29 + 7 = domingo

se domingo > 30, 30 (referente aos dias da semana) - 29 + 7 = domingo do mes 2 (junho) e dia 6.
*/

//if ($inicio_ano < $final_ano){ echo"final do ano é maior"; } else { echo "inicio do ano é maior";}
       
//Janeiro

while ($inicio_ano < $final_ano){

if ($dia_i == 1){

$dia_f = $dia_f + 6; // condicao para ultimo dia da semana


} else {

$dia_i = $dia_i + 6 + 1;//condicao para o primeiro dia da semana
$dia_f = $dia_i + 6;

    if($dia_f > 30){
    
    $dia_f = $dia_f - 30 + 6;
    $mes = $mes + 1;
    
    }
    

} // fecha else dia_i == 1

echo "$dia_i/$mes/$ano ------ $dia_f/$mes/$ano";
break;
}
?>

Edited by beuleal
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...