[tutorial] Inicio e fim da semana com JavaScript

0 respostas
I

E ae pessoal! Estive esses dias procurando algo sobre como pegar o inicio e o fim da semana, com javascript e nao encontrei, vi com java, usando o gregoriancalendar tal, mas no meu caso precisava que fosse javascript, vi também que tinha muita gente procurando.

Bom, depois de tanto procurar e nao encontrar resolvi desenvolver (=p) uma classe no js, e vou compartilhar com vocês =)

Resumindo esta classe pega o inicio e fim da semana atual, e as semanas anteriores. Para pegar as semanas posteriores é só questão de alguns ajustes… sem problema.

Eu nao precisava de tudo isso, mas resolvi fazer ela bem generica pra ser mais usal pra comunidade ae, abraço!

/*

Classe para manipulacao de datas
@author Wallas dos Santos Souza
@since 28 de Dezembro de 2007

@formato: String
'brasileiro': formata a data de saida no formato dd/mm/aaaa
'americano': formata a data de saida no formato aaaa/mm/dd

@qtdSemanas: int
informe quantas semanas deseja resgatar.

@semanal: String
'inicio_fim': formata a data de saida no formato <inicio da semana>,<fim da semana>
'fim_inicio': formata a data de saida no formato <fim da semana>,<inicio da semana>

*/

function Datas(formato,qtdSemanas,semanal){

 this.retorno  = iniciar(formato,qtdSemanas,semanal);
  
 function iniciar(formato,qtdsSemanas,semanal){
 
    data = new Date();
    dia = data.getDate();
    mes = data.getMonth();
    ano = data.getFullYear();

    if(mes == 0)
       mes_ex = "January";
    else if (mes == 1)
       mes_ex = "February";
    else if (mes == 2)
       mes_ex = "March"
    else if (mes == 3)
       mes_ex = "April"
    else if (mes == 4)
       mes_ex = "May"
    else if (mes == 5)
       mes_ex = "June"
    else if (mes == 6)
       mes_ex = "July"
    else if (mes == 7)
       mes_ex = "August"
    else if (mes == 8)
       mes_ex = "September"
    else if (mes == 9)
       mes_ex = "October"
    else if (mes == 10)
       mes_ex = "November"
    else if (mes == 11)
       mes_ex = "December"            

    dia_ex = dia + " " + mes_ex + " " + ano;

    return retornaSemanal(dia_ex,formato,qtdsSemanas,semanal);
 }
   
 function retornaSemanal(dia_ex,formato,semanas,semanal){
  		
    um_dia = 1000
    uma_semana = 24*60*60*(um_dia*7)
    seis_dias = 24*60*60*(um_dia*6)

    contagem = fazContagem(data.getDay());

    inicial = "";
    inicio_da_semana = new Array(semanas);
    fim_da_semana = new Array(semanas);

    //semana atual  
    d = new Date (dia_ex)

    d.setTime (d.getTime() - contagem);

    if (formato == 'brasileiro')
            inicio_da_semana[0] = d.getDate() + "/" + (d.getMonth()+1) + "/" + d.getFullYear();
    else if (formato == 'americano')
            inicio_da_semana[0] = d.getFullYear() + "/" + (d.getMonth()+1) + "/" + d.getDate();

    inicial = d.getTime() - 24*60*60*1000;
		
    d.setTime (d.getTime () + seis_dias)
    if (formato == 'brasileiro')
            fim_da_semana[0] = d.getDate() + "/" + (d.getMonth()+1) + "/" + d.getFullYear();
    else if (formato == 'americano')
            fim_da_semana[0] = d.getFullYear() + "/" + (d.getMonth()+1) + "/" + d.getDate();

    //agora que ja tenho o inicio e fim da primeira semana posso calcular as anteriores	

    //demais semanas
    for(i=1; i<(semanas); i++){
        d = new Date (inicial)

        if (formato == 'brasileiro')
                fim_da_semana[i] = d.getDate() + "/" + (d.getMonth()+1) + "/" + d.getFullYear();
        else if (formato == 'americano')
                fim_da_semana[i] = d.getFullYear() + "/" + (d.getMonth()+1) + "/" + d.getDate();

        d.setTime (d.getTime () - seis_dias)
        if (formato == 'brasileiro')
                inicio_da_semana[i] = d.getDate() + "/" + (d.getMonth()+1) + "/" + d.getFullYear();
        else if (formato == 'americano')
                inicio_da_semana[i] = d.getFullYear() + "/" + (d.getMonth()+1) + "/" + d.getDate();

        inicial = d.getTime() - 24*60*60*1000;
    }		
	
    fim = new Array (semanas);
		
    for(j = 0; j<fim.length; j++){
        if (semanal == 'inicio_fim')
            fim[j] = fim_da_semana[j] + "," + inicio_da_semana[j];
        else if(semanal == 'fim_inicio')
            fim[j] = inicio_da_semana[j] + "," + fim_da_semana[j];
    }

    return fim;
  }

  function fazContagem(dia_semana){
    for(i=0; i<dia_semana; i++){
        if(dia_semana == 0)
            return 0;
        else
            return 24*60*60*(1000*dia_semana);
    }
  }

}

Usando:

var datas = new Datas('brasileiro',4,'inicio_fim');
alert(datas.retorno); //retorna um array pode-se usar datas.retorno[0] etc.. assim como esta retorna separado por virgulas.
Criado 28 de dezembro de 2007
Respostas 0
Participantes 1