QUOTE(carlinhosprog @ 18/09/2007 - 14:14)

é o seguinte quando eu uso a função acima com as seguintes datas (01/06/07 e 31/12/07) o resultado é 6, mas com as datas (01/06/07 e 31/01/08) o resultado é 8 sendo que a diferença entre as duas datas é de apenas 1 mes.
Comigo, continua retornando certo. Agora, este código coloca 7 no label.
Label1.Caption := IntToStr(MonthsBetween(StrToDate('01/07/07'), StrToDate('31/01/08')));
Você não poderia colocar parte do código onde você manipula a função e/ou variáveis?
Parece que há algo no seu código, já que no post inicial, deveria retornar 6 e você obtinha 7; no segundo post, deveria retornar 7 e você diz obter 8...
De qualquer modo, esta função retorna uma aproximação. Veja o que diz o help:
"Because months are not all the same length, MonthsBetween returns an approximation based on an assumption of 30.4375 days per month. Fractional months are not counted. Thus, for example, MonthsBetween reports the difference between Feb 1 and Mar 1 as 0."traduzindo:
Pelo fato de os meses não terem o mesmo número de dias, MonthsBetween retorna uma aproximação baseada em uma média - 30.4375 dias por mês. Fração de meses não são contados. Assim, por exemplo, MonthsBetween retorna a diferença entre 1 de Fev e 1 de Mar como 0 (zero).E isto pode realmente gerar algum transtorno.
Para contar dias entre duas datas, você pode utilizar a função que o colega
Jhonas citou antes.
Mas se for para contar apenas meses, seria o caso de retornar lá na função apenas o valor da variável Mes. Ainda assim, você deve verificar se você pretende fazer algum arredondamento. Por ex. 3 meses e 20 dias, você poderia querer considerar 4 meses. Neste caso, outras avaliações se fazem necessárias.