PDA

Ver la Versión Completa : en contrar el ultimo dia del mes


GustavoCruz
21-07-2007, 02:01:15
hola a todos, en estos momentos estoy desarrollando una aplicación y tengo un pequeño problema con los componentes Tdatetimepicker, tengo una función que me busca el último dias del mes, esta es llamada desde en el evento onChange del componente tdatetimepicker, el codigo es el siguiente:

function TfPrincipal.DiasMes(fecha: TdateTime): integer;
var
ano, mes, dia: Word;
begin
DecodeDate( fecha, ano, mes, dia );
Result:=0;
case mes of
2: if IsLeapYear(ano) then Result:=29 else Result:=28;
1,3,5,7,8,10,12: Result:=31;
4,6,9,11: Result:=30;
end;
end;

el problema radica cuando cambio el mes a uno que tiene menos días que el anterior, es decir, de agosto a septiembre.

espero haberme hecho explicar y de antemano gracias por todos los aportes que me puedan dar. Estaré atento a ellos...:)

eduarcol
21-07-2007, 02:14:19
Busca la funcion DaysinMonth de la unidad dateutils

AzidRain
12-03-2008, 00:03:55
Que crees eduarcol....yo andaba buscando la misma cosa y resulta que DaysInMonth(2) devuelve 31!!!!!!!!!!!!!!! ora si que...bueno...lo correcto es usar DaysinAMonth pasándole el año para que nos calcule los dias de febrero correctamente.

Casimiro Notevi
12-03-2008, 01:04:26
No tengo un delphi aquí, pero seguramente 2 es marzo, 1 es febrero, 0 es enero... digo yo, no puedo probarlo ahora.

jandok238
12-03-2008, 01:35:25
No tengo un delphi aquí, pero seguramente 2 es marzo, 1 es febrero, 0 es enero... digo yo, no puedo probarlo ahora.


Don't worry... yo si tengo delphi a la mano... yo hago al prueba.... ;):D

......... 5 min despues.......

Pues ya probe....
y con la funcion DaysInMonth(); y en todos los meses me dio como resultado 31

en cambio con la funcion DaysInAMonth(); si me dio bien la cantidad de dias de cada mes... (incluido 29 en los años bisiestos).


EDITO :

La funcion DaysInMonth(); recibe como parametro TDateTime y no un entero ....


Que crees eduarcol....yo andaba buscando la misma cosa y resulta que DaysInMonth(2) devuelve 31!!!!!!!!!!!!!!! ora si que...bueno...lo correcto es usar DaysinAMonth pasándole el año para que nos calcule los dias de febrero correctamente.


asi que poniendo


Edit1.Text := IntToStr(DaysInMonth(StrTodate('10/04/2008')));


pues si devuelve los dias correctos.... ;);):D:D

y de la otra funcion... pues no hay problema... DaysInAMonth() aqui van dos parametros... (año,mes) ;);)

AzidRain
12-03-2008, 01:58:27
Tienes razón no me había dado cuenta...pero al fin de cuentas resolvimos nuestro problema :)

a_f_g
14-03-2008, 16:43:52
Esta funcion devuelve el ultimo dia del mes EndOfTheMonth();

Yun-i
14-03-2008, 17:01:10
colo debes tener en dateutils para ocupar las funciones mencionadas (DecodeDate,DaysInMonth)
yo hice uno con ayuda de los forista algo asi:



var FechaHasta : TDateTime;
Dia, Mes, Ano: Word;


DecodeDate(datatimepicker.Date, Ano, Mes, Dia);
FechaHasta:=ReCodeDate(datatimepicker.Date,Ano, Mes, DaysInMonth(datatimepicker.Date)); // último día del mes con su respectivo añejo jijiji



si lo que quieres es el puro dia del mes ps es algo como

DaysInMonth(datatimepicker.Date));

ami me funciona ala perfeccion espero te sirvaa :)