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 22-03-2019
tiqui_loquito tiqui_loquito is offline
Miembro
 
Registrado: oct 2013
Posts: 56
Poder: 11
tiqui_loquito Va por buen camino
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;
Responder Con Cita
  #2  
Antiguo 22-03-2019
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 22-03-2019
tiqui_loquito tiqui_loquito is offline
Miembro
 
Registrado: oct 2013
Posts: 56
Poder: 11
tiqui_loquito Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 22-03-2019
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 22-03-2019
tiqui_loquito tiqui_loquito is offline
Miembro
 
Registrado: oct 2013
Posts: 56
Poder: 11
tiqui_loquito Va por buen camino
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;
Responder Con Cita
  #6  
Antiguo 22-03-2019
tiqui_loquito tiqui_loquito is offline
Miembro
 
Registrado: oct 2013
Posts: 56
Poder: 11
tiqui_loquito Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 22-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por tiqui_loquito Ver Mensaje
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
Responder Con Cita
  #8  
Antiguo 22-03-2019
tiqui_loquito tiqui_loquito is offline
Miembro
 
Registrado: oct 2013
Posts: 56
Poder: 11
tiqui_loquito Va por buen camino
Smile

Cita:
Empezado por Casimiro Notevi Ver Mensaje
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
Responder Con Cita
  #9  
Antiguo 23-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por tiqui_loquito Ver Mensaje
Es muy cierto casimiro, igual que tu, efecsia y otros más.
Gracias por colaborar siempre

Sí, ecfisa también, yo no, yo sigo siendo un viejo novato
Responder Con Cita
  #10  
Antiguo 23-03-2019
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

Tampoco nos pasemos... ¡que lo saqué de Delphi Basics!
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #11  
Antiguo 23-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bueno, casi más importante que saber, es saber dónde encontrar la solución
Responder Con Cita
  #12  
Antiguo 26-03-2019
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Bueno, casi más importante que saber, es saber dónde encontrar la solución

// Saludos
Responder Con Cita
  #13  
Antiguo 26-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
// Saludos

La peli es un pelín viejita, como alguno como yo me sé.
Responder Con Cita
  #14  
Antiguo 27-03-2019
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.
Responder Con Cita
  #15  
Antiguo 27-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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.
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 dias entre 2 fechas. Bluefox Varios 9 02-12-2017 21:36:18
Problema calcular meses , dias entre rango de fechas shoulder Varios 3 12-03-2014 21:34:50
Calcular numero de dias entre dos fechas vero Varios 22 31-05-2011 15:37:34
como calcular los dias entre fechas. carlos gonzalez Varios 2 27-08-2005 02:30:59
calcular dias en reporte @-Soft Impresión 5 18-12-2003 16:27:34


La franja horaria es GMT +2. Ahora son las 08:32:48.


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