Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-03-2014
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 16
shoulder Va por buen camino
Problema calcular meses , dias entre rango de fechas

Encontre esta funcion de calculo de edad, que la adapte para el calculo de meses y dias solo cambiando DATE por una variable, pero me parece que en esa funcion hay un error cuando el mes es febrero porque hace
DiasFinales = (Dias Iniciales -Dias del ultimo mes);
y si resto 24/02/2014 - 31/12/2014 me da 10 meses y 7 dias pero esta mal son y 5 días y de la funcion no cambie nada. Estoy equivocado?.

Cita:


function CalculaEdadCompleta(Fecha, Fecha1:TDateTime):String;
var A, AA, M, MM, D, DD: Word;
Anio, Mes, Dia: double;
begin
DecodeDate(Fecha, A, M, D);
DecodeDate(Fecha1, AA, MM, DD);
Anio := Int(AA - A);
if( M <= MM ) then
Mes := MM - M
else
begin
Mes := MM+12-M;
Anio := Anio -1;
end;
if( D <= DD ) then
Dia := DD - D
else
begin
Dia:=DD+MonthDays[IsLeapYear(AA),MM]-D;
Mes := Mes -1;
end;
if Mes < 0 then
begin
Anio := Anio - 1;
Mes := 12 + Mes;
end;
Result := Format('Años: %.0f, Meses: %.0f, Dias: %.0f', [Anio, Mes, Dia]);
end;




Responder Con Cita
  #2  
Antiguo 12-03-2014
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 909
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Amigo el cálculo está bien...

La lógica es la siguiente:

Tu fecha inicial es 24/02/2014, es decir todos los días 24 de cada mes Cumple Mes ....

Si hacemos el cálculo a mano tendriamos
24 de marzo -> 1
24 de Abril -> 2
...
24 de Diciembre -> 10

Como la fecha final es 31 de Diciembre entonces hay que sumarle la diferencia entre el 31 de Diciembre y 24 de Diciembre que es...7 días.

Puedes corroborar este cálculo en la cálculadora de Windows Calc.Exe, bajo la opción "Ver->Cálculo de Fecha", selecciona de la combobox "Calcular la diferencia entre dos fechas"...

Saludos cordiales
Responder Con Cita
  #3  
Antiguo 12-03-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 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
  #4  
Antiguo 12-03-2014
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 441
Poder: 16
shoulder Va por buen camino
Calculo Rango fechas

Primero Gracias!!!, segundo el error (mio de interpretacion) es que necesito hacer el calculo a nivel laboral de pago (dias trabajados) por eso la funcion me fallaba.

Tiene que ser dias trabajados del 24/02 al 28/02/2014 y 10 meses hasta el 31/12/2014. POR ESO SON 10 MESES Y 5 DIAS.

En vez un cumpleaños es como me explican ustedes (10 meses y 7 dias) en realidad tengo que adaptar la funcion.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Calcular EDAD en años, meses y dias de una Persona MaMu Trucos 6 03-09-2013 00:57:24
Calcular numero de dias entre dos fechas vero Varios 22 31-05-2011 15:37:34
guardar y determinar días entre rango de fechas..!! kiozo Varios 11 20-06-2010 16:02:35
rpt. manager: meses y días transcurridos entre dos fechas dandia28 Impresión 1 20-02-2008 16:56:08
como calcular los dias entre fechas. carlos gonzalez Varios 2 27-08-2005 02:30:59


La franja horaria es GMT +2. Ahora son las 08:23:16.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi