[Lazarus-es] comparacion de fechas

Paola Bruccoleri pbruccoleri en adinet.com.uy
Dom Feb 17 20:38:51 CET 2013


El 17/02/2013 05:00 p.m., Paola Bruccoleri escribió:
> El 17/02/2013 04:40 p.m., Paola Bruccoleri escribió:
>> Hola todos..
>>
>> me está d evolviendo mal una comparación cuando se que las fechas son
>> iguales...
>>
>> en un form pido mes y año
>>
>> var
>>   dFecha, dFechaContrato, dFechaAux: TDate;
>>   dFechaReaj, dFechaReaj2, dFechaReaj3: TDate;
>>
>> begin
>> .....
>>    dFecha:= EncodeDate(StrToInt(edtAnio.Text), StrToInt(cboMes.Text), 
>> 1); // 1er dia del mes
>>
>>     (el campo finicio es tipo date, Firebird y uso componentes Zeos)
>>     dFechaContrato:= qryContratos.FieldByName('finicio').AsDateTime;
>>     if DayOf(dFechaContrato) = 1 then
>>       dFechaAux:= dFechaContrato
>>     else
>>       dFechaAux:= EndOfTheMonth(dFechaContrato) + 1;
>>
>>     nMeses:= MonthsBetween(dFecha, dFechaAux) + 1;  (sumo 1 porque 
>> sino entre 01/02/12 y 01/02/13 da 11 meses)
>>
>>     if nMeses >= 12 then begin
>>       nAnios:= Trunc(nMeses/12);
>>       dFechaReaj:= IncYear(dFechaAux, nAnios);
>>
>>        showmessage(datetostr(dfecha));
>>        showmessage(datetostr(dfechareaj));
>>
>>       if dFecha = dFechaReaj then begin
>>             ......... // POR ACA NO PASA Y LAS FECHAS LAS MUESTRA IGUAL
>>
>>
>> alguna idea???
> recién descubro que la comparación NO da cuando se hace esta cuenta, 
> porque si no se hiciera todo funciona perfectamente. (o sea, con los 
> contratos hechos el 1er día del mes)
>
> dFechaAux:= EndOfTheMonth(dFechaContrato) + 1;
>
> o sea, cuando la fecha de contrato no es el 1er día, que debo obtener 
> el 1er día del mes siguiente....
>
> si tengo como fecha 20/01/2012, dFechaAux debería ser 01/02/2012, le 
> sumo 1 año: 01/02/2013 y no compara con dFecha que es 01/02/2013
>
> la verdad.. no se porqué falla esa cuenta!
>
en cambio así funciona bien:
StartOfTheMonth(IncMonth(dFechaContrato, 1));

claro... usé la función datetimetostr() y veo que:

EndOfTheMonth(dFechaContrato) + 1; devuelve 01/02/2012 23:59:59
y
StartOfTheMonth(IncMonth(dFechaContrato, 1)); devuelve 01/02/2012

por eso la comparación falla con los siguientes cálculos al sumar 1 año, 
etc.

aunque ambas funciones devuelven TDateTime..

por el hábito de sumar 1 a una fecha dada ya que funciona en otros 
lenguajes, es que lo hice aquí. Ahora deberé revisar otras cuentas por 
las dudas







------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20130217/9be14bde/attachment-0002.html>


More information about the Lazarus-es mailing list