PDA

Ver la Versión Completa : Manejo de Fechas - Sumar o restar días


r1d2m3
30-10-2010, 01:15:52
Hola a todos, tengo el siguiente requerimiento en una aplicación: necesito sumar o restar n días a una fecha y no puedo dar con la sintaxis, ¿alquien me puede tirar un cable con este punto?

Saludos y quedo a la espera de alguna respuesta.

ecfisa
30-10-2010, 02:17:39
Hola r1d2m3.

La unit StrUtils tiene la función IncDay a ese fín.

...
var
ADate: TDateTime;
begin
ADate:= IncDay(Date, 1); // ADate = fecha actual + un día
ADate:= IncDay(Date, -5); // ADate = fecha actual - cinco días.
end;


Revisá este link (http://www.clubdelphi.com/foros/showthread.php?t=70377) que se trató el tema.


Saludos. :)

r1d2m3
30-10-2010, 03:06:24
Gracias por el hilo, eso era lo que estaba buscando. Ya había visto esa función pero en la documentación no se aclara debidamente la contradicción que surge de ver el nombre de la func, incDay, o sea incrementar dias, vista así, parece que solo sirve para sumar días, pero bueno, suerte que ustedes ya la tenían clara. Por si le sirve a alguien mas, lo que estaba intentando hacer era pasar una fecha y definir el día de inicio de la semana y el día de finalización de la misma, es decir, si le paso el dia de hoy, viernes 29 de octubre de 2010, la función me debe devolver los días lunes 25 y domingo 31, voy a usar esta función para parametrizar un listado pidiendo un filtro para un día en concreto, o bien para la semana en curso, o bien para el mes en curso. A continuación, pego el código de mi función, tienen que definir una estructura del tipo record para contener los dias inicio y final.


function Semana(vFecha:string):dSemana;
var
varDiasSumo, varDiasResto, varDiaActual:Integer;
fecDesde, fecHasta, varFecAuxi:TDateTime;
varDevo:dSemana;

begin
varFecAuxi:=StrToDate(vFecha);
varDiaActual:=DayOfTheMonth(varFecAuxi);
varDiasResto:=((DayOfTheWeek(varFecAuxi)-1)*-1);
varDiasSumo:=(7-DayOfTheWeek(varFecAuxi));
fecDesde:=IncDay(varFecAuxi, varDiasResto);
fecHasta:=IncDay(varFecAuxi, varDiasSumo);
varDevo.fecDesde:=fecDesde;
varDevo.fecHasta:=fecHasta;
Result:=varDevo;
end;


type dSemana = record
fecDesde:TDateTime;
fecHasta:TDateTime;
end;




Espero le sirva a alguien mas.

Saludos.