shoulder,
Cita:
Empezado por shoulder
...Encontré esta función de calculo de edad, que la adapte para el calculo de meses y días...si resto 24/02/2014 - 31/12/2014 me da 10 meses y 7 días pero esta mal son 5 días...¿Estoy equivocado?...
|
El valor que obtienes es correcto,
del 24/02 al 24/12 hay 10 meses, del 24/12 al 31/12 hay 7 días.
Revisa este código:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;
type
TForm1 = class(TForm)
DateTimePicker1: TDateTimePicker;
DateTimePicker2: TDateTimePicker;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function CalculateLapseDate(FechaI, FechaF : TDateTime) : String;
var
AAI, AAF, MMI, MMF, DDI, DDF: Word;
AA, MM, DD: Integer;
begin
DecodeDate(FechaI, AAI, MMI, DDI);
DecodeDate(FechaF, AAF, MMF, DDF);
AA := AAF - AAI;
if( MMI <= MMF ) then
MM := MMF - MMI
else
begin
MM := MMF + 12 - MMI;
AA := AA - 1;
end;
if( DDI <= DDF ) then
DD := DDF - DDI
else
begin
DD := DDF + MonthDays[IsLeapYear(AAF),MMF] - DDI;
MM := MM - 1;
end;
if MM < 0 then
begin
AA := AA - 1;
MM := 12 + MM;
end;
Result := Format('%.0d Años %.0d Meses y %.0d Dias', [AA, MM, DD]);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
FechaI, FechaF : TDateTime;
Msg : String;
AuxFechaI, AuxFechaF : String;
begin
FechaI := DateTimePicker1.DateTime;
FechaF := DateTimePicker2.DateTime;
Msg := CalculateLapseDate(FechaI, FechaF);
DateTimeToString(AuxFechaI,'yyyy/mm/dd',FechaI);
DateTimeToString(AuxFechaF,'yyyy/mm/dd',FechaF);
Msg := Format('Entre %s y %s han trancurrido: %s',
[AuxFechaI, AuxFechaF, Msg]);
MessageDlg(Msg,mtInformation,[mbOK],0);
end;
end.
El código anterior
permite calcular el rango de años, meses y días transcurridos desde una fecha inicial hasta una fecha final, como se muestra en la siguiente imagen:
Espero sea útil
Nelson.