Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda Con fechas (https://www.clubdelphi.com/foros/showthread.php?t=27866)

torete_86 02-12-2005 09:39:26

Ayuda Con fechas
 
Buenas.

Tengo un problema y esque no se usar mucho el decode :(

Lo que tengo que hacer es lo siguiente:

Tengo un combobox en el que tienen que aparecer los dias del mes actual.
Ex: Si estamos en diciembre 31 Items, si estamos en Febrero 28

La cuestion es que no se como hacer para que segun el mes en el que se encuentre el sistema en el combobox aparezcan tantos items como dias tiene el mes.

Si alguien me puede ayudar se lo agradeceria mucho.

Muchas gracias de antemano.

Saludos

P.D. me descuidaba, uso D6

Héctor Randolph 02-12-2005 09:48:11

Prueba con la función DaysInAMonth() que viene en la unidad DateUtils.

Te sirve para conocer cuántos días tiene un mes determinado.

Después sólo es cuestión se colocarlos en el ComboBox.

Un saludo

torete_86 02-12-2005 09:58:54

Buenas,

Muchas gracias por responder tan rapido.

Pero no se como usar bien esa funcion. Me dice que no esta declarada (no la tengo declarada como function pq no se de donde sacarla :( )

Si me pudieras echar una mano, o si crees que hay otra manera de hacerlo.

Saludos

Héctor Randolph 02-12-2005 10:02:37

Olvidé que la unidad DateUtils apareció después de la versión Delphi 7.

Revisa en este tema tú mismo puedes implementar la función.

Saludos.

torete_86 02-12-2005 11:54:15

puffff no he sido capaz tio :(

algun otro metodo? xD

piccolo2101 02-12-2005 12:16:41

Te explico un poco lo del tema con modificaciones...

const
MonthDays: array [1..12] of byte =(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

function DaysInAMonth(const AYear, AMonth: Word): Word;
begin
// Miramos si es febrero y año bisiesto, para ello usamos la función
// del tema que te comento héctor isLeapYear
if (AMonth = 2) and (isLeapYear(AYear)) then
Result := MonthDays[AMonth] + 1 // De ser así se pone 29 días a feb.
else
Result := MonthDays[AMonth]; // En otro caso los días salen de la tabla.
end;

function IsLeapYear(Year: Word): Boolean;
begin
Result := (Year mod 4 = 0) and ((Year mod 100 <> 0) or (Year mod 400 = 0));
end;

torete_86 02-12-2005 13:37:15

ahora por ejemplo en el oncreate tengo ke tener una variable que sea fecha no?

y a esta fecha pasarle la sysdate.

luego hacer un decode de la fecha y pasarle el mes a esa funcion no?

jueeeee (no se puede ser novato pq andas mas pez xDDDD jajaja)

muchas gracias

piccolo2101 02-12-2005 15:47:03

Exacto. otra opcion es separa febrero de los demas de la siguiente forma:
Código Delphi [-]
var
   auxMes : Word;
 
// Si es febrero
if Mes = 2 then
begin
   result := 28;      // En principio tiene 28 dias
   if AñoBisiesto(Año) then  // Salvo que sea bisiesto que le sumamos 1
      result := Result + 1;   
end
// Si es otro mes
else
begin
   // Con esto conseguimos hacer que a partir del mes 8 auxMes vuelva a ser
   //1,2,3 para el 8,9,10 respetivamente.
   auxMes := (Mes mod 8) + (Mes div 8);
   // Una vez hecho esto, si te fijas, los impares tendrán 31 días y los pares 
   // 30
   if (auxMes mod 2) = 0 then   // Si es par 
      Result := 30
   else
      Result := 31;
end;

Este podría ser otro procedimiento válido para calcular los días. La ventaja del anterior con respecto a este es la disposición precalculada de los valores de los días pero como los ordenadores trabajan muy rápido con este tipo de operaciones no tiene importancia. Por otro lado, la ventaja de este es que evitamos tener espacio en memoria ocupada por la constante aunque tampoco es que sea drástico.

torete_86 04-12-2005 12:58:24

Buenas!!

muchisimas gracias por ayudarme :)

al final e conseguido solucionar el problema.

saludos

Héctor Randolph 04-12-2005 17:44:29

Cita:

Empezado por torete_86
al final e conseguido solucionar el problema.

Hola, me da gusto que hayas resuelto tu duda.

Con el fin de ayudar a otras personas que se encuentren con la misma situación, sería bueno que nos digas, cómo lo solucionaste finalmente.

Un saludo.


La franja horaria es GMT +2. Ahora son las 17:23:24.

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