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 formula (https://www.clubdelphi.com/foros/showthread.php?t=62194)

paladincubano 10-12-2008 10:17:02

Ayuda con formula
 
Hola foreros. Tengo en un ComboBox valores fijos del 1 al 5, y en otro valores del 1 al 12, el primero representa el numero de la semana en el numero del mes del otro ComboBox. Ej. El usuario elije: ComboBox1=3 y ComboBox2=10 Esto significa la 3ra semana del mes de Octubre. Ahora, con esos dos datos necesito saber, a que numero de semana pertenece en el AÑO. Ej= 42 (hipotetico). Lo que necesito es lo mismo que lo que hace el WeekOf(TDate) de la unit DateUtils, que te devuelve de una fecha, el numero de la semana en el año. Con la diferencia que no tengo la fecha, sino, como dije antes, solo el numero de la semana en el mes y el mes por supuesto. Muchas gracias.

coso 10-12-2008 15:06:21

Hola, echale un vistazo a EncodeDate

Lepe 10-12-2008 15:34:57

Hola:

¿no puedes usar un TDateTimePicker? es un control donde eliges la fecha directamente y no tienes que lidiar con errores como 30/02/2010.

Saludos

paladincubano 10-12-2008 15:39:05

Cita:

Empezado por Lepe (Mensaje 330297)
Hola:

¿no puedes usar un TDateTimePicker? es un control donde eliges la fecha directamente y no tienes que lidiar con errores como 30/02/2010.

Saludos

Lepe, vuelve a leer mi pregunta, porque parece no has entendido.
Olvidate de fecha... No tengo fecha alguna, solo tengo un numero del 1 al 5 y otro del 1 al 12, el primero indica el NUMERO DE LA SEMANA del MES del segundo numero.
EJ: 3 y 10, significa, 3ra semana del mes de octubre.
y necesito:
de esos dos numeros, poder sacar el NUMERO de la semana del AÑO.
EJ: 3ra semana del mes de octubre = xx SEMANA DEL AÑO.
Gracias por tu comentario.

coso 10-12-2008 16:37:57

Hola paladincubano,

si bien me parece que tienes toda la razon del mundo, creo que la agresividad estaba injustificada. Sobre como resolver tu duda, seria algo como :

Código Delphi [-]
var
       d,m,y : word;
       t : TDateTime;
       s : integer;
begin
       d  := 7*inttostr(ComboBoxSemana.Text);
       m  := inttostr(ComboBoxMes.Text);
       y  := 2000; 
       t  := EncodeDate(y,m,d);
       s  := WeekOf(t);
 end;

es posible que a d le tengas que sumar o restar uno, segun tus necesidades. Saludos.

paladincubano 10-12-2008 16:43:48

Muchas gracias, luego lo pruebo, ahora no estoy delante del ordenador. Con respecto a la agresividad, perdonenme si lo han entendido asi, pero afirmo, no hay agresividad ninguna en mis palabras, al menos es lo que siento, y cuando lo escribi, pues por supuesto no estab agresivo. Vuelvo y repito, si heri a alguien los sentimientos pues disculpadme pero no fue mi intencion.
Y menos en esta web que ayuda tanto a los demas y principalmente pues ami que lo necesito mucho de vez en cuando.
saludos y gracias por sus posts.

fidel 10-12-2008 18:34:42

Hola:

Una pequeña idea que puedes ampliar, aunque quizás sea un poco enrevesada.

Semana del mes igual a 1 (el primer día)

Vas recorriendo día a día todos los días del mes pedido y cogiendo a que semana del año pertenece caa día.
Cuando cambie la semana del año a la que pertenece aumentas en uno la semana del mes y sabrás en que semana de ese més estás.
Comparas la semana del mes con la semana pedida y cuando coincida ya la tienes.

No se si se entiende muy bien en tan pocas líneas.

Un saludo.

Lepe 10-12-2008 21:48:55

Lo que necesitas es la función EncodeDayOfWeekInMonth que te devuelve una fecha, ¿fecha?, ¿he dicho fecha? miedo me da pensar lo que puede decir nuestro amigo paladincubano como se enoje :rolleyes: :p

Una vez tienes tienes la fecha usa weekOf y sacas el número de la semana.

La verdad, he estado a punto de no responder porque, para hallar la semana del año, necesitas saber el año en cuestión, y en tu mensaje original no dices nada del año, solo tienes el número de mes y el número de semana dentro del més. He querido aclarar esto no vaya a ser que....:D

Saludos

coso 11-12-2008 16:46:54

Bueno, la verdad es que es bastante mas sencillo...

semanadelaño = (mes-1)*4 + numerosemanames

...mas o menos...

esto seria mas correcto :

Código Delphi [-]
function SemanadelAño(n,m : integer) : integer;
const
     diaspormes = [31,28,31,30,31,30,31,31,30,31,30,31]
begin
     result := 0;
     while m > 0 do
     begin
        result := result + diaspormes[m];
        dec(m);
     end;

     result := result div 7 + n;
end;

aunque tambien daria fallos segun bisiesto, 1 de enero domingo, etc...

Lepe 11-12-2008 16:54:10

...recuerda los años bisiestos ;)...

Edito:
Si te empeñas, puedes hacerlo a mano, por supuesto, pero ese mismo array creo haberlo visto en sysutils o en dateutils, con esto quiero decir que al final vas a reinventar la rueda, y posiblemente tenga algún que otro bug (siempre hay un detalle que se te olvida). La VCL y las rutinas de Borland suelen estr depuradas y bien pensadas, con lo cual, es mejor tirar de ellas que hacerlas de nuevo.

Por supuesto puedes hacerlo como quieras, pero mi consejo es usar lo que ya está hecho.

coso: ambos estamos editando nuestros mensajes... a ver que sale de todo esto :D

Saludos

coso 11-12-2008 16:58:46

Nada, lo mejor es mi primer codigo, aunque creo que el ultimo daria error tansolo si el año empieza mas atras de miercoles y es bisiesto...en fin las herramientas para resolver la duda ya estan. saludos.

luisgutierrezb 11-12-2008 21:07:50

Si buscan una formula sin el año va a estar muy dificil, por ejemplo la formula:

semanadelaño = (mes-1)*4 + numerosemanames

Semanadelaño = (12-1)*4 + 4 //buscando la ultima semana de diciembre

semanadelaño = 48 //que el año no trae 52 semanas? y en algunos casos 53? hay meses que traen 5 semanas otros 4, es por eso que se necesita el año para el calculo.

paladincubano 12-12-2008 14:36:54

Perdonen por mi tardanza.
Estaba de viaje.
He leido todos los post y realmente interesantes.
Claro que dispongo del año, normalmente es el año en curso.
Por fin cual formula es la que me recomiendan?
saludos y gracias por todo.

Lepe 13-12-2008 06:58:57

Pues cada uno te recomendará su fórmula :D

Supongo que eres tú el que tiene que valorar los pros y contras y elegir una u otra ;).

Saludos


La franja horaria es GMT +2. Ahora son las 13:52:48.

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