Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas al calcular días entre enero y febrero (https://www.clubdelphi.com/foros/showthread.php?t=93825)

tiqui_loquito 22-03-2019 17:15:17

Problemas al calcular días entre enero y febrero
 
Buenos días

Tengo el siguiente problema.

Cuando calculo los días de vida de una persona entre las fechas 31/01/2019 y el día 12/02/2019 la función me retorna 9 días, sin embargo la persona de acuerdo al calendario tiene 12 Días.

Creo que debo modifica la línea

Código Delphi [-]
Dia:=DD+MonthDays[IsLeapYear(AA),MM]-D;
Mes := Mes -1;

Pero que sugerencias o ideas me pueden dar para solucionar este problemita.

Muchas gracias

La función que aplico es la siguiente (La he tomado de los foros de club delphi)


Código Delphi [-]
function CalculaEdadCompleta(Fecha:TDateTime):String;
var A, AA, M, MM, D, DD: Word;
  Anio, Mes, Dia: double;
begin
  DecodeDate(Fecha, A, M, D);
  DecodeDate(Date, 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;

dec 22-03-2019 18:08:22

Hola a todos,

Tal vez quieras usar la función "DaysBetween" de la unidad "DateUtils" como en el código de abajo: *

Código Delphi [-]
uses
  DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var
  Fromdate, ToDate : TDateTime;
begin
  Fromdate := EncodeDateTime(2019, 01, 31, 0, 0, 0, 0);
  ToDate   := EncodeDateTime(2019, 02, 12,  0, 0, 0, 0);

  ShowMessageFmt('Total de días de diferencia: %d', [DaysBetween(ToDate, Fromdate)]);
end;

* Tomado de Delphi Basics

tiqui_loquito 22-03-2019 18:26:27

Buena tarde dec

Gracias por tu pronta respuesta.

La función que te uso la realizo para calcular la edad respecto a la fecha de nacimiento de un usuario y la fecha en que se esta creando dicho paciente. El calculo lo hace bien para meses y años. El problema se encontró en el caso puntual que mencione, el cual el paciente nació el 1 de enero y lo estaban registrando el 12 de febrero y le ponía 9 días.

Ahora, con respecto a lo que me dices, sería usarla cuando los años y los meses sean ceros?, de esa manera lo entiendo.

Gracias

dec 22-03-2019 18:41:00

Hola a todos,

La función "EncodeDateTime" te permite conformar una variable "TDateTime", que, es la que requiere después "DaysBetween", por ejemplo. Los argumentos de la variable "EncodeDateTime" son, por este orden, año, mes, día, hora, minuto, segundo y milisegundo. En el caso de arriba se dejan en cero la hora, minuto, segundo y milisegundo, porque, no los he considero relevantes para el caso que nos ocupa. Evidentemente, tú puedes usar "EncodeDateTime" con los argumentos que precises.

No estoy seguro si esto responde tu duda o no...

tiqui_loquito 22-03-2019 21:03:52

Realice lo siguiente
 
Gracias David Esperalta

Realice la siguiente modificación al código y me retorna los días cuando solo no ha transcurrido ni un mes

Código Delphi [-]
   if( DDI <= DDF ) then
      DD := DDF - DDI
   else
   begin
      DD := DDF + MonthDays[IsLeapYear(AAF),MMF] - DDI;
      MM := MM - 1;

      if MM = 0 then
      DD:=  DaysBetween(FechaI, FechaF)
   end;

tiqui_loquito 22-03-2019 21:07:35

Tema resuelto
 
Puedo dar el tema por resuelto.

Gracias a David Esperalta he resuelto mi duda, muchas gracias.

Espero este hilo le sea de ayuda a otras personas.^\||/

Casimiro Notevi 22-03-2019 21:22:04

Cita:

Empezado por tiqui_loquito (Mensaje 531217)
Puedo dar el tema por resuelto.
Gracias a David Esperalta he resuelto mi duda, muchas gracias.
Espero este hilo le sea de ayuda a otras personas.^\||/

Es que David Esperalta es uno de los maestros de clubdelphi :)

tiqui_loquito 22-03-2019 21:57:34

Cita:

Empezado por Casimiro Notevi (Mensaje 531218)
Es que David Esperalta es uno de los maestros de clubdelphi :)

Es muy cierto casimiro, igual que tu, efecsia y otros más.

Gracias por colaborar siempre:D^\||/

Casimiro Notevi 23-03-2019 01:18:26

Cita:

Empezado por tiqui_loquito (Mensaje 531219)
Es muy cierto casimiro, igual que tu, efecsia y otros más.
Gracias por colaborar siempre:D^\||/


Sí, ecfisa también, yo no, yo sigo siendo un viejo novato :D

dec 23-03-2019 08:51:33

Hola a todos,

Tampoco nos pasemos... ¡que lo saqué de Delphi Basics! :D :D :D

Casimiro Notevi 23-03-2019 10:46:25

Bueno, casi más importante que saber, es saber dónde encontrar la solución :)

roman 26-03-2019 14:02:34

Cita:

Empezado por Casimiro Notevi (Mensaje 531225)
Bueno, casi más importante que saber, es saber dónde encontrar la solución :)


// Saludos

Casimiro Notevi 26-03-2019 17:02:27

Cita:

Empezado por roman (Mensaje 531262)
// Saludos

;)
La peli es un pelín viejita, como alguno como yo me sé.

escafandra 27-03-2019 22:46:59

Como curiosidad y conociendo como se interpreta el Tipo TDateTime de delphi, la diferencia en días entre dos fechas puede calcularse también de esta forma, restando la parte entera:

Código Delphi [-]
Dias:= Ceil(Date2) - Ceil(Date1);



Saludos.

Casimiro Notevi 27-03-2019 22:50:41

Efectivamente, una fecha es un número con decimales, la parte entera es el día y la parte decimal es la hora.
Así que se puede hacer cálculos con ellos como con cualquier otro número.


La franja horaria es GMT +2. Ahora son las 00:13:56.

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