Ver Mensaje Individual
  #3  
Antiguo 12-03-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Reputación: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
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
    { Private declarations }
  public
    { Public declarations }
  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.
Responder Con Cita