Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   en contrar el ultimo dia del mes (https://www.clubdelphi.com/foros/showthread.php?t=46026)

GustavoCruz 21-07-2007 02:01:15

en contrar el ultimo dia del mes
 
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:

Código Delphi [-]
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

Cita:

Empezado por Casimiro Notevi (Mensaje 272531)
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 ....

Cita:

Empezado por AzidRain
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

Código Delphi [-]
  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

Saludos
 
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:

Código Delphi [-]
 
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 :)


La franja horaria es GMT +2. Ahora son las 20:54:28.

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