Hola microbiano.
La ayuda de Delphi dice que la función
MonthsBetween, devuelve el número
aproximado de meses entre dos fechas...
Cita:
Returns the approximate number of months between two specified TDateTime values.
...
Call MonthsBetween to obtain the difference, in months, between two TDateTime values. 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.
|
Una solución entonces, es ajustar la primer fecha al día 1 y la segunda al día máximo de ese mes:
Código Delphi
[-]
function TForm1.MesesANombres(D1, D2: TDate): TStrings;
var
i, c, Tot: Integer;
y,m,d: word;
begin
DecodeDate(D1,y,m,d);
D1:= EncodeDate(y , m, 1);
DecodeDate(D2,y,m,d);
D2:= EncodeDate(y, m, DaysInMonth(D2));
Result:= TStringList.Create;
Tot:= MonthsBetween(D1, D2);
c:= MonthOf(D1);
for i:= MonthOf(D1) to Tot + MonthOf(D1)-1 do
begin
if c = 12 then
c:= 1
else
Inc(c);
Result.Add(LongMonthNames[c])
end;
end;
Un saludo.