FoxPro/Visual FoxPro - extrar fechas

 
Vista:

extrar fechas

Publicado por nicolas reyes (2 intervenciones) el 14/01/2013 13:01:01
extrar de una fecha el dia y mes para hacer un listado de cumpleaños en visual fox pro
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

extrar fechas

Publicado por Fidel (657 intervenciones) el 14/01/2013 15:06:25
1) Extraer el día de una fecha:
dFecha=date()
numeroDia=Day(dFecha)
numeroMes=Month(dFecha)
numeroAno=Year(dFecha)

2) Fin de Mes. (útil para determinar entornos mensuales)
dFinMes=Findemes(5,2013)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
*******************************
PROCEDURE Findemes(xnMes,xnAno)
*******************************
* Devuelve el último día
* de un mes cualquiera (fecha D)
*******************************
LOCAL Bi,lBisiesto,ldLast,nMid
IF EMPTY(xnMes)
	xnMes=MONTH(DATE())
ENDIF
IF EMPTY(xnAno)
	xnAno=YEAR(DATE())
endif
if Vartype(xnMes)="C"
	xnMes=val(xnMes)
endif
if xnMes=0
	xnMes=month(date())
endif
if vartype(xnAno)="C"
	xnAno=Val(xnAno)
endif
if xnAno=0
	xnAno=year(date())
ENDIF
lBisiesto=IIF(xnAno=2000,.t.,iif(Mod(xnAno,4)=0,iif(Mod(xnAno,25)=0,.f.,.t.),.f.))
DO case
	CASE xnMes=2
		ldLast=IIF(lBisiesto,29,28)
	CASE INLIST(xnMes,1,3,5,7,8,10,12)
		ldLast=31
	OTHERWISE
		ldLast=30
ENDCASE
RETURN DATE(xnAno,xnMes,ldLast)
ENDPROC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

extrar fechas

Publicado por Juan Manuel Cruz Torres (512 intervenciones) el 15/01/2013 18:24:37
Fidel, para determinar un año bisiesto es más correcto que recuerdes que

"Un año es bisiesto si es divisible entre 4, excepto si es divisible entre 100 pero no entre 400"

En todo caso, determinar el día de fin de mes, argumentando año y mes sería tan simple como:

FUNCTION FinDeMes
lPara xnMes as int, xnAnho as int
local xx as date
xx= DATE( xnAnho, xnMes, 1)
return( GOMONTH(xx-DAY(xx),1) )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

extrar fechas

Publicado por Fidel (558 intervenciones) el 17/01/2013 00:00:18
Juan Manuel, si a la función que propones le pasas como parámetros 3 y 2013, te dirá que el último día de marzo de 2013 es 28/03/2013, lo cual es falso.
Eso porque le resta 1 al primer día del mes pedido (se ubica en 28/02/2013) y le agrega un mes con GoMonth(), de donde resulta 28/03/2013.

Para utilizar GoMonth(), haría una adecuación:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
FUNCTION Findemes
LPARAMETERS xnMes as int, xnAnho as int
local xx as date
IF VARTYPE(xnMes)#"N".or.Empty(xnMes)
	xnMes=MONTH(DATE())
ENDIF
IF VARTYPE(xnAnho)#"N".or.Empty(xnAnho).or.xnAnho<1753
	xnAnho=YEAR(DATE())
ENDIF
xnMes=xnMes+1
IF xnMes>12
	xnMes=1
	xnAnho=xnAnho+1
endif
xx= DATE( xnAnho, xnMes, 1)
RETURN GOMONTH(xx-DAY(xx),0)

De paso esto permite pasar sin parámetros para devolvernos el fin de mes actual.
Muchas gracias
Fidel.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

extrar fechas

Publicado por Juan Manuel Cruz Torres (512 intervenciones) el 17/01/2013 17:04:00
Tienes toda la razón, reformulo:

FUNCTION FinDeMes
lPara xnMes as int, xnAnho as int
local xx as date
xx= DATE( xnAnho, xnMes, 1)
RETURN ( GOMONTH(xx,1)-DAY(xx) )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar