[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