PDA

Ver la Versión Completa : Ayuda Con fechas


torete_86
02-12-2005, 09:39:26
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 (http://www.clubdelphi.com/foros/showpost.php?p=112424&postcount=8) 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:

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
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.