Cuantos lunes trae un mes...

3,150 views
Skip to first unread message

Azael

unread,
Apr 2, 2012, 8:29:20 PM4/2/12
to Comunidad de Visual Foxpro en Español
Hola a todos, me gustaria que me ayudaran en saber si hay una rutina
para saber cuantos lunes trae un mes

Gracias...

ArturoPC

unread,
Apr 2, 2012, 8:39:20 PM4/2/12
to publice...@googlegroups.com
Créate una pequeña función:

1. Que reciba tres parámetros: mes, año, día de la semana (1 para domingo, 2 para lunes y así). De este modo tu función te sirve para cualquier día de la semana.
2. Arma el primer día de ese mes con CTOD desde los dos primeros parámetros.
3. Con DOW(primer día del mes) averiguas qué día es ese primer día.
4. Si es igual al tercer parámetro bingo lo tienes, sino, súmale lo que necesitas para saber el primer día que caiga con el día que mandaste en tu tercer parámetro.
5. De 4 tienes el primer día, suma siete y verifica que pertenezca al mes de tu primer parámetro, si es así, cuentas uno más y sumas siete a la nueva fecha. Y así hasta cuando MONTH() devuelva el siguiente mes.
6. Y listo, lo tienes.

Slds,

Arturo PC.

Luis Leon

unread,
Apr 2, 2012, 8:46:23 PM4/2/12
to foro vfp
YO HICE ALGO PARA SABER CUANTOS DOMINGOS TIENE UN MES
 
_Desde =CTOD('01/01/2012')
_Hasta = CTOD('31/01/2012')
Mi_Desde = _Desde
Do While Mi_Desde>=_Desde And Mi_Desde<=_Hasta
 
     If Upper(Cdow(Mi_Desde))='DOMINGO' Or Upper(Cdow(Mi_Desde))='SUNDAY'
         Cuenta_Domingos = Cuenta_Domingos + 1
    Endif
 Endif
 Mi_Desde = Mi_Desde + 1
Endd
 
SOLO CAMBIA A LUNES EN ESPAÑOL E INGLES TAL COMO LO VES
 
 

 
> Date: Mon, 2 Apr 2012 17:29:20 -0700
> Subject: [vfp] Cuantos lunes trae un mes...
> From: azael...@gmail.com
> To: publice...@googlegroups.com

Luis Maria Guayan

unread,
Apr 2, 2012, 8:49:29 PM4/2/12
to publice...@googlegroups.com
* Cuantos lunes tiene abril de 2012
? CantDiaXdelMes(2,4,2012)

FUNCTION CantDiaXdelMes(tnDow,tnMonth,tnYear)
  * tnDow:   1=Domingo ... 7=Sabado
  * tnMonth: 1=Enero ... 12=Diciembre
  * tnYear:  1900 ... 9999
  ldPrimero = DATE(tnYear,tnMonth,1)+7-DOW(DATE(tnYear,tnMonth,1)+7-1,tnDow)
  lnCuantos = 0
  DO WHILE tnMonth = MONTH(ldPrimero)
    ldPrimero = ldPrimero + 7
    lnCuantos = lnCuantos + 1
  ENDDO
  RETURN lnCuantos
ENDFUNC


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

ArturoPC

unread,
Apr 2, 2012, 8:51:56 PM4/2/12
to publice...@googlegroups.com
Luis:

Te recomiendo dos cosas: (1) no uses CDOW() que devuelve el nombre usa DOW() que devuelve el número de día. (2) Para este tipo de cosas usa funciones, te ayuda a que lo puedas utilizar desde cualquier lugar de tu aplicación y te sirve para cualquier día de la semana.

Slds,

Arturo PC.


El lunes 2 de abril de 2012 19:46:23 UTC-5, Luis Leon escribió:
YO HICE ALGO PARA SABER CUANTOS DOMINGOS TIENE UN MES
 
_Desde =CTOD('01/01/2012')
_Hasta = CTOD('31/01/2012')
Mi_Desde = _Desde
Do While Mi_Desde>=_Desde And Mi_Desde<=_Hasta
 
     If Upper(Cdow(Mi_Desde))='DOMINGO' Or Upper(Cdow(Mi_Desde))='SUNDAY'
         Cuenta_Domingos = Cuenta_Domingos + 1
    Endif
 Endif
 Mi_Desde = Mi_Desde + 1
Endd
 
SOLO CAMBIA A LUNES EN ESPAÑOL E INGLES TAL COMO LO VES
 
 

 
> Date: Mon, 2 Apr 2012 17:29:20 -0700
> Subject: [vfp] Cuantos lunes trae un mes...
> From: azael...@gmail.com

Luis Leon

unread,
Apr 2, 2012, 8:54:21 PM4/2/12
to foro vfp
Recuerda amigo que en la configuracion del vfp, no siempre dia domingo es el primer dia, esto esta de acuerdo a como empieza la semana en la configuracion de vfp
 

Date: Mon, 2 Apr 2012 21:49:29 -0300
From: luism...@gmail.com
To: publice...@googlegroups.com
Subject: Re: [vfp] Cuantos lunes trae un mes...

Luis Maria Guayan

unread,
Apr 2, 2012, 9:07:28 PM4/2/12
to publice...@googlegroups.com
No hay problema con eso en esta función ya que utilizo el segundo parámetro de la función DOW()

Lo que sí es que en mi función si defino "
tnDow: 1=Domingo ... 7=Sabado" y eso no cambia con ninguna configuración de VFP


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________


Azael

unread,
Apr 3, 2012, 3:09:56 PM4/3/12
to publice...@googlegroups.com
Gracias a todos por su ayuda....

ArturoPC

unread,
Apr 3, 2012, 3:24:57 PM4/3/12
to publice...@googlegroups.com
Luis:

Puedes usar DOW = (<tuFecha>, 1) y le indicas que empiece con el domingo independientemente de la la configuración general.

Slds

Arturo PC

Jorge Lopez

unread,
Apr 4, 2012, 1:18:51 AM4/4/12
to Comunidad de Visual Foxpro en Español
Hola les dejo una funcion mas corta y sin bucles, esto ultimo reduce
la complejidad ciclometrica para mejorar el performance de la
aplicacion.
Saludos

* Usando simple logica: El numero de veces que un dia de la semana
esta en un mes solamente puede ser 4 ó 5

FUNCTION fCuantosDOWxMes
LPARAMETERS tnAnio, tnMes, tnDia
RETURN IIF(MONTH(DATE( tnAnio,tnMes,1)+7-DOW(DATE(tnAnio,tnMes,
1)+7-1,tnDia) + 28) = tnMes, 5, 4)
ENDFUNC


? fCuantosDOWxMes(2012,4,2) --> 5

ArturoPC

unread,
Apr 4, 2012, 7:59:49 AM4/4/12
to publice...@googlegroups.com
Excelente Jorge, tienes razón, solo 4 o 5 veces, si se descarta 5, hay 4, así de simple.

Carlos Miguel FARIAS

unread,
Apr 4, 2012, 10:11:13 AM4/4/12
to publice...@googlegroups.com
Compactando algo el código...

FUNCTION fCuantosDOWxMes( tnAnio, tnMes, tnDia )
ld = DATE( tnAnio,tnMes,1)+7
RETURN IIF(MONTH(ld-DOW(ld-1,tnDia) + 28) = tnMes, 5, 4)
ENDFUNC

tendría tambien que funcionar, pero la solución original igual es muy buena.
Saludos: Miguel, La Pampa (RA)

El 04/04/12, ArturoPC <apa...@gmail.com> escribió:

Carlos Miguel FARIAS

unread,
Apr 4, 2012, 10:11:30 AM4/4/12
to publice...@googlegroups.com
El 04/04/12, Carlos Miguel FARIAS <carlosmig...@gmail.com> escribió:
Reply all
Reply to author
Forward
0 new messages