1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Calcular o número da semana de uma data

Discussão em 'Progress 4GL' iniciado por dilonei, Abril 28, 2009.

  1. dilonei

    dilonei Sem Pontuação

    Para calcular o número da semana de uma data, podemos utilizar o seguinte calculo:

    Código:
    def var f as int format "999".
    def var s as int format "999".
    def var dt-ini as int format "999".
    def var c-ini as char format "x(10)".
    def var c-fim as char format "x(10)".
    
    def var dt-simula as date format "99/99/9999".
    
    assign dt-simula = date("28/04/2009").
    
    assign 
        /* Data inicio do ano */
        c-ini = "01/01/" + string(year(dt-simula)) 
        /* Data do dia */
        c-fim = string(day(dt-simula)) + "/" + string(month(dt-simula)) + "/" + string(year(dt-simula))
        /* Verifica em que dia da semana o dia 01/01 caiu */
        dt-ini = weekday(date(c-ini))
        /* Quantidade de dias no ano */
        f     = int(date(c-fim) - date(c-ini))
        /* 
           f : quantidade de dias até a data
           (7 - weekday(dt-simula)): pega os dias que falta da semana da data
           dt-ini: quantidade de dias a somar no inicio do ano para completar uma semana
        */
        f     = f + (7 - weekday(dt-simula)) + dt-ini
        /* Divide a qantidade de dias incrementada por 7 */
        s     = f / 7.
                  
        /* Exemplo:
           Data Inicio: 01/01/2009 - Caiu numa quinta-feira, a contar de domingo são 5 dias *
           Data do Calculo: 28/04/2009 - Cai numa terça feita, a contar de domingo são 3 dias *
           Dias até a data a contar do dia pimeiro do ano: int(date(01/01/2009) - date(28/04/2009)) = 126
           f = 117 + (7 - 3) + 5 = 126
           
           Então: 126 / 7 = 18. 
           
           Logo, para o dia 28/04/2009 a semana é a 18.
           
           Calculo:
           
           * Para descobrir o dia utilizamos a formula (weekday(data))
            
         */
    
    disp c-ini skip c-fim skip f skip s skip dt-ini skip int(date(c-fim) - date(c-ini)).
    
    
    Acho que é isto.

    Abraços a todos

    Dilonei Grando
    Analista de Sistemas
  2. atila.cm

    atila.cm Membro Participativo

    Dilonei valeu.

    Para complementar sua dica postei um exemplo onde testo se o ano fiscal para o cliente inicia no dia primeiro do ano ou na primeira segunda feira. Muitas multi-nacionais consideram o inicio do ano fiscal como sendo a primeira segunda feira do ano.

    Abraços

    Atila
    atila.cm@hotmail.com

    Arquivos Anexados:

Compartilhe esta Página