Club Delphi  
    FTP   CCD     Enlaces   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

Respuesta
 
Herramientas Desplegado
  #1  
Antiguo 29-07-2010
Avatar de ingabraham
ingabraham ingabraham is offline
Miembro
 
Registrado: ago 2007
Posts: 569
ingabraham Va por buen camino
Dias360 en delphi

en excel para calcular el numero de dias es asi:
pero ojo excel toma como 360 dias por año.

DIAS360(fecha_inicial;fecha_final;método)

quiero hacer igual a excel, q me arroje el mismo resultado de dias pero en delphi.
__________________
Enseñar es la virtud de un sabio.
Responder Con Cita
  #2  
Antiguo 29-07-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 8.091
ecfisa Es un diamante en brutoecfisa Es un diamante en brutoecfisa Es un diamante en brutoecfisa Es un diamante en bruto
Hola ingabraham.

La función DaysBetween que esta en la unit DateUtils, te da la cantidad de días entre dos fechas.


Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 29-07-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.869
delphi.com.ar Va por buen camino
Supongo que será algo como:
Código Delphi [-]
function DaysBetween360(const ANow, AThen: TDateTime): Integer;
begin
  Result := (DaysBetween(ANow, AThen) div 30) *  30;
end;

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #4  
Antiguo 30-07-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.869
delphi.com.ar Va por buen camino
Después de responder, me di cuenta que la funcion DAYS360 / DIAS360 no cuenta simplemente meses de 30 días, sino que es algo mas complejo:

http://office.microsoft.com/en-us/ex...005209047.aspx


Encontre en la web este código en VB: http://www.experts-exchange.com/Data..._24634023.html
Y lo traduje a esto SIN PROBARLO:

Código Delphi [-]
function Days360(const ANow, AThen: TDateTime; Method: boolean): Integer;
var
  dStartDate,
  dEndDate: TDateTime;
  wStartDay,
  wStartMonth,
  wStartYear,
  wEndDay: Word;
  FebruaryAdjustment: Integer;
begin
  { Local copy }
  dStartDate := ANow;
  dEndDate := AThen;

  DecodeDate(dStartDate, wStartYear, wStartMonth, wStartDay);
  wEndDay := DayOf(dEndDate);

  if not Method Then
  begin
    { U.S. (NASD) method.
      If the starting date is the 31st of a month, it becomes equal to the 30th of the same month.
      If the ending date is the 31st of a month and the starting date is earlier than the 30th of a month,
      the ending date becomes equal to the 1st of the next month;
      otherwise the ending date becomes equal to the 30th of the same month.
    }

    if wStartDay > 30 then
      dStartDate := dStartDate - 1;

    if (wEndDay = 31) and (wStartDay < 30) then
      dEndDate := dEndDate + 1
    else
    if(wEndDay = 31) and (wStartDay >= 30) then
      dEndDate := dEndDate - 1;

    // adjust for February
    if (wStartMonth = 2) and (wStartDay = DaysInAMonth(wStartYear, wStartMonth)) then
      FebruaryAdjustment := 30 - wStartDay // Last day of February (either 28 or 29)
    else
      FebruaryAdjustment := 0;

  end else
  begin
    {
     European method.
     Starting dates and ending dates that occur on the 31st of a month become
     equal to the 30th of the same month.
    }

    if wStartDay > 30 Then
      dStartDate := dStartDate - 1;

    if wEndDay > 30 Then
      dEndDate := dEndDate - 1;

    FebruaryAdjustment := 0;
  end;

  Result := (MonthsBetween(dStartDate, dEndDate) * 30) + (wStartDay - wStartDay) - FebruaryAdjustment;
end;
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 16-08-2010
Avatar de ingabraham
ingabraham ingabraham is offline
Miembro
 
Registrado: ago 2007
Posts: 569
ingabraham Va por buen camino
como se llama esta función?
Method: boolean
que es?
que se le pasa por parametro.
__________________
Enseñar es la virtud de un sabio.
Responder Con Cita
  #6  
Antiguo 16-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 8.091
ecfisa Es un diamante en brutoecfisa Es un diamante en brutoecfisa Es un diamante en brutoecfisa Es un diamante en bruto
Cita:
Empezado por ingabraham Ver Mensaje
como se llama esta función?
Method: boolean
que es?
que se le pasa por parametro.
Hola ingabraham.

El nombre de la función es Days360, como lo expuso Delphi.com.ar.

Method es un parámetro de tipo Boolean (Verdadero o Falso). Aparentemente, sirve para indicarle
a la función por que método se va a realizar el cálculo: U.S. (NASD) method ó European method



Saludos.

Última edición por ecfisa fecha: 16-08-2010 a las 23:19:19.
Responder Con Cita
  #7  
Antiguo 16-08-2010
Avatar de afunez2007
afunez2007 afunez2007 is offline
Miembro
 
Registrado: oct 2007
Ubicación: La Ceiba, Honduras
Posts: 170
afunez2007 Va por buen camino
Lightbulb

Cita:
Empezado por delphi.com.ar Ver Mensaje
Supongo que será algo como:
Código Delphi [-]function DaysBetween360(const ANow, AThen: TDateTime): Integer; begin Result := (DaysBetween(ANow, AThen) div 30) * 30; end;


Saludos!
La funcion DasyBetween es bastante simple de usar y devuelve la cantidad de dias entre 2 fechas, si tuevieramos dos datetimepcikers por ejemplo seria asi:

Código Delphi [-]
Var
dias: Integer
Begin
 dias:=DaysBetween(Dtp1.Date, Dtp2.date);
end;

Saludos
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!!
Responder Con Cita
  #8  
Antiguo 18-08-2010
Avatar de ingabraham
ingabraham ingabraham is offline
Miembro
 
Registrado: ago 2007
Posts: 569
ingabraham Va por buen camino
NO ME FUNCIONA NINGUNO DE LOS DOS CODIGOS
Ingresen a excel dos fechas

y en la celda resultado escriban =dias360(f1,f2);

esto es lo que yo quiero obtener en delphi

?????
ayudenme.
__________________
Enseñar es la virtud de un sabio.
Responder Con Cita
  #9  
Antiguo 19-08-2010
Avatar de afunez2007
afunez2007 afunez2007 is offline
Miembro
 
Registrado: oct 2007
Ubicación: La Ceiba, Honduras
Posts: 170
afunez2007 Va por buen camino
Lightbulb

Cita:
Empezado por afunez2007 Ver Mensaje
La funcion DasyBetween es bastante simple de usar y devuelve la cantidad de dias entre 2 fechas, si tuevieramos dos datetimepcikers por ejemplo seria asi:

Código Delphi [-]Var dias: Integer Begin dias:=DaysBetween(Dtp1.Date, Dtp2.date); end;


Saludos
Lo probe en excel y en delphi 7, en ambos funciona pero dan 1 dia de diferencia debiado a que excel utiliza meses de 30 dias y delphi utiliza dias reales.

Código Delphi [-]
IntEdit1.Value:=DaysBetween(dtp1.Date , dtp2.Date);
No olvidar poner en las uses DateUtils

Saludos
Archivos Adjuntos
Tipo de Archivo: zip DiasEntreFecha.zip (5,4 KB, 15 visitas)
__________________
Si robas, roba un beso, si mientes que sea por amor y si engañas que sea a la muerte!!
Responder Con Cita
  #10  
Antiguo 19-08-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.639
Caral Va por buen camino
Hola
Código Delphi [-]
procedure TForm1.btn1Click(Sender: TObject);
begin
IntEdit1.Value:=DaysBetween(dtp1.Date , dtp2.Date + 1);
end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #11  
Antiguo 19-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 8.091
ecfisa Es un diamante en brutoecfisa Es un diamante en brutoecfisa Es un diamante en brutoecfisa Es un diamante en bruto
A ver ingabraham... probá con esta función:

Código Delphi [-]
function Dias360(FechaIni,FechaFin: TDateTime; MetodoEuro: Boolean): Longint;
var
  DiaIni, DiaFin: Longint;
begin
  DiaIni:= DayOf(FechaIni);
  DiaFin:= DayOf(FechaFin);
  if not MetodoEuro then
  begin
   if DiaIni = 31 then
     FechaIni:= IncDay(FechaIni, -1);
   if (DiaFin = 31)and(DiaIni = 31) then
     FechaFin:= IncDay(FechaFin, -1)
   else
     if DiaFin = 31 then
       FechaFin:= IncDay(FechaFin, 1);
  end
  else
  begin
    if DiaIni = 31 then
      FechaIni:= IncDay(FechaIni, -1);
    if DiaFin = 31 then
      FechaFin:= IncDay(FechaFin, -1);
  end;
  DiaIni:= DayOf(FechaIni);
  DiaFin:= DayOf(FechaFin);
  if YearOf(FechaFin) > YearOf(FechaIni)  then
    FechaFin:= IncMonth(FechaFin, 1);
  Result:= MonthsBetween(FechaIni, FechaFin)* 30 + DiaFin - DiaIni;
end;

Al igual que la de Federico es una traducción.

No uso Microsoft Office por lo que no puedo probarla con Excel, pero pareciera funcionar.

De no ser así, con todo lo que te han posteado, tenés una buena base para desarrollarla
por vos mismo. Al fín y al cabo, sos el interesado ¿no ?

Por supuesto, cuando esté funcionando, todos te vamos a agradecer el aporte si decidís compartirlo.

Saludos.

Última edición por ecfisa fecha: 19-08-2010 a las 10:55:53.
Responder Con Cita
  #12  
Antiguo 20-08-2010
Avatar de ingabraham
ingabraham ingabraham is offline
Miembro
 
Registrado: ago 2007
Posts: 569
ingabraham Va por buen camino
hola gracias por el codigo, lo probare.
a mis compañeros que me mencionan la funcion DaysBetween

prueben con 22 febrero del 2010 y 10 agosto 2010

dias360 excel da 168

DaysBetween delphi da 169


casi pega en el blanco, lo que no se es si con un rango de fecha mas grande existan más dias de diferencia.
__________________
Enseñar es la virtud de un sabio.
Responder Con Cita
  #13  
Antiguo 20-08-2010
Avatar de ingabraham
ingabraham ingabraham is offline
Miembro
 
Registrado: ago 2007
Posts: 569
ingabraham Va por buen camino
hola gracias por el codigo, pero nda, no me funciona.

a mis compañeros que me mencionan la funcion DaysBetween

prueben con
22 -02--2010 y 10-08-2010
dias360 excel da 168
DaysBetween delphi da 169

diferencia 1 dia

06 -11-2009 y 30-07-2010
dias360 excel da 264
DaysBetween delphi da 266

diferencia 2 dias


28-03-2010 y 10-08-2010
dias360 excel da 132
DaysBetween delphi da 135

diferencia 3 dias
__________________
Enseñar es la virtud de un sabio.
Responder Con Cita
  #14  
Antiguo 10-09-2010
Avatar de ingabraham
ingabraham ingabraham is offline
Miembro
 
Registrado: ago 2007
Posts: 569
ingabraham Va por buen camino
diferencia de dias , suponiendo que los meses son de 30 dias.

necesito un algoritmo para calcular la diferencia de dias entre dos fechas

partiendo de que cada mes tiene 30 dias y año 360.
__________________
Enseñar es la virtud de un sabio.
Responder Con Cita
  #15  
Antiguo 10-09-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador gruñón
 
Registrado: sep 2004
Ubicación: Planeta Agua
Posts: 23.148
Casimiro Notevi Va camino a la fama
Pues entonces sólo has de dividir entre 30
__________________
/* Saludos
*/
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código

$ sudo mv system > /dev/null

Responder Con Cita
  #16  
Antiguo 10-09-2010
Avatar de ingabraham
ingabraham ingabraham is offline
Miembro
 
Registrado: ago 2007
Posts: 569
ingabraham Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Pues entonces sólo has de dividir entre 30
como asi,
ej.

31.01.2010
al
15.09.2010

o

27.02.2010
al
15.09..2010
__________________
Enseñar es la virtud de un sabio.
Responder Con Cita
  #17  
Antiguo 10-09-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 8.091
ecfisa Es un diamante en brutoecfisa Es un diamante en brutoecfisa Es un diamante en brutoecfisa Es un diamante en bruto
Hola.

Este tema ya se trató aca .

Saludos.
Responder Con Cita
  #18  
Antiguo 10-09-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador gruñón
 
Registrado: sep 2004
Ubicación: Planeta Agua
Posts: 23.148
Casimiro Notevi Va camino a la fama
ingabraham, si no has conseguido resolver el problema, no inicies un nuevo hilo, sigue con el que estabas, gracias.

Ya he unido los dos en uno sólo.
__________________
/* Saludos
*/
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código

$ sudo mv system > /dev/null

Responder Con Cita
  #19  
Antiguo 10-09-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 8.091
ecfisa Es un diamante en brutoecfisa Es un diamante en brutoecfisa Es un diamante en brutoecfisa Es un diamante en bruto
Gracias Casimiro.

Avisé para evitar múltiples resultados de un mismo tema en las busquedas.

Saludos.
Responder Con Cita
  #20  
Antiguo 10-09-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador gruñón
 
Registrado: sep 2004
Ubicación: Planeta Agua
Posts: 23.148
Casimiro Notevi Va camino a la fama
Cita:
Empezado por ecfisa Ver Mensaje
Gracias Casimiro.
Avisé para evitar múltiples resultados de un mismo tema en las busquedas.
Saludos.
Claro, de la otra forma nos quedamos con temas sin solucionar, hay que continuar en el mismo hasta que esté resuelto el problema. Gracias.
__________________
/* Saludos
*/
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código

$ sudo mv system > /dev/null

Responder Con Cita
Respuesta


Herramientas
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
rpt. manager: meses y días transcurridos entre dos fechas dandia28 Impresión 1 20-02-2008 16:56:08
Diferencia 2 Dias entre Tdatetime (delphi) y Datetime (SQL server) sinalocarlos Varios 2 10-05-2007 04:00:38
Diferencia en dias entre dos fechas. AMINOA2R Firebird e Interbase 2 15-12-2005 16:58:37
Dias y meses romansiux Varios 5 13-06-2005 18:19:12
agrupar por dias meses y años en Interbase????? mguixot Conexión con bases de datos 0 03-10-2003 20:31:08


La franja horaria es GMT +2. Ahora son las 07:33:50.


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