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

Quantos “meses completos” existem entre duas datas?

Discussão em 'Progress 4GL' iniciado por ds201, Março 10, 2019.

  1. ds201

    ds201 Membro Participativo

    Bom dia

    Meu cliente deseja saber quantos “meses completos” existem entre duas datas informadas.
    Um exemplo:
    Data inicial: 10/03/2019
    Data final: 12/06/2019.
    Neste exemplo os “meses completos” são os meses 04 e 05, ou seja: Abril e Maio.
    Já tive várias idéias para resolver esta questão. Mas elas me pareceram complicadas.
    Alguém já resolveu um problema semelhante?

    Obrigado
  2. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Código:
    disp interval(03/10/2019, 06/12/2019,'month').
    Maicon Soares curtiu isso.
  3. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    desculpe, entendi errado a sua pergunta, nesse caso vc tem que criar uma procedure pra calcular isso.
  4. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Eu faria assim ...
    Código:
    define variable dataInicial as date no-undo.
    define variable dataFinal   as date no-undo.
    define variable quantidadeMeses as integer no-undo.
    
    
    assign dataInicial = 03/10/2019
           dataFinal   = 06/12/2019.
    
    run intervaloMesesCompletos(dataInicial, dataFinal, output quantidadeMeses).
    
    message substitute('Meses completos entre &1 e &2 são &3', dataInicial, dataFinal, quantidadeMeses)
        view-as alert-box info buttons ok.
    
    procedure intervaloMesesCompletos:
        define input  parameter dataInicial     as date    no-undo.
        define input  parameter dataFinal       as date    no-undo.
        define output parameter quantidadeMeses as integer no-undo.
    
        /* ajustando data inicial para o mes seguinte */
        assign dataInicial = date(month(dataInicial), 28, year(dataInicial)) + 10.
        assign dataInicial = date(month(dataInicial), 1, year(dataInicial)).
    
        /* ajustando data Final para o mes anterior */
        assign dataFinal = date(month(dataFinal), 1, year(dataFinal)) - 1.
    
        assign quantidadeMeses = abs(interval(dataInicial, dataFinal, 'month')) + 1.
    end procedure.
  5. ds201

    ds201 Membro Participativo

    Muito obrigado pela ajuda.

Compartilhe esta Página