• advertisement_alt
  • advertisement_alt
  • advertisement_alt
Sign in to follow this  
Followers 0
Janio Aguiar

Quantidade de meses entre Datas

5 posts in this topic

Função para retornar quantidade de meses entre duas datas.

Contribuição do nosso colega Rinaldo

PROCEDURE NumeroMeses(LOCAL dParametroDataInicial, LOCAL dParametroDataFinal)

dDataInicial is Date = dParametroDataInicial

dDataFinal is Date = dParametroDataFinal

nContador is int = 0

WHILE dDataInicial <> "" AND dDataInicial < dDataFinal

	dDataInicial..Month++

	nContador += iif(dDataInicial <= dDataFinal, 1, 0)

END

RESULT nContador

 

1 person likes this

Share this post


Link to post
Share on other sites

PROCEDURE Iif(Condicao is boolean, Resultado_True, Resultado_False)
IF Condicao THEN
    RESULT Resultado_True
ELSE
    RESULT Resultado_False    
END

1 person likes this

Share this post


Link to post
Share on other sites

Pode ser assim também, sem usar a função IIF():

PROCEDURE NumeroMeses(LOCAL dDataInicial, LOCAL dDataFinal)
nContador is int = 0
WHILE dDataInicial <> "" AND dDataInicial < dDataFinal
    dDataInicial..Month++
    IF dDataInicial <= dDataFinal THEN
        nContador++
    END
END
RESULT nContador

4 people like this

Share this post


Link to post
Share on other sites

Saudações. Estou procurando resolver esse problema e encontro o post de vocês falando exatamente disso.
Estou tentando entender funções como a DateTimeDifference e outras como a DateDifference e Age.

PROCEDURE DifMeses(LOCAL dDataIni is Date, LOCAL dDataFim is Date)

   duDifDias is Date = DateTimeDifference(dDataIni,dDataFim)
   Trace(duDifDias)

//rDifDias is real = val(middle(sDifMeses,2,7))
//rDifMeses is int = rDifDias/(30)// + 1
//result NumToString(rDifMeses)
//FUNCIONOU 
//Outro modo é somente as linhas abaixo:
   nDifMeses is int = Val(duDifDias)/30
RESULT nDifMeses

Passei os parâmetros à função diretamente de EDTs com datas estilo date roll e mask YYYYMMDD.

P.S.: Por que toda vez que edito o post meu código ganha um pulo de linha a mais entre cada linha? 
Resposta Admin: Editamos aki pra testar e não ocorreu, não sei se poderia ser talvez o navegador ou o tipo de código da inserção.

Share this post


Link to post
Share on other sites

Estava pensando aqui, a função que usei não resolve quanto aos diferentes dias em cada mês, apenas considera como 30 para qualquer mês, então deve ser bem mais recomendado o uso da função Age mesmo.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0