Control fecha

Control fecha

Postby FiveWiDi » Mon Aug 06, 2012 7:55 pm

Hola a todos,

A ver si me saben decir como puedo controlar que una cadena no se puede convertir a fecha por que sería una fecha incorrecta; es decir, si tengo cFecha = "30/02/2012", éta no se podrá convertir por que no existe el día 30 en febrero.

Seguro que es una chorrada pero a estas horas estoy bastante bloqueado.

Gracias,
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1200
Joined: Mon Oct 10, 2005 2:38 pm

Re: Control fecha

Postby RuFerSo » Mon Aug 06, 2012 8:31 pm

Hola FiveWiDi: En la librería NF.lib de Harbour (tambien xHarbour), que se refiere a Nanforum.lib, en ella esta la funcion

FT_FDay(dFecha) Primer dia del mes, FirstDay
FT_LDay(dfecha) Ultimo dia del mes, LastDay
yo las uso en mis programas sin problemas.

Hay varias funciones de fecha muy útiles en esta librería.
Saludos
Ruben Fernandez.
RuFerSo
 
Posts: 55
Joined: Mon Feb 20, 2012 2:56 pm

Re: Control fecha

Postby reinaldocrespo » Mon Aug 06, 2012 8:48 pm

Y que tal esta idea?

Code: Select all  Expand view  RUN

dDate := ctod( cFecha )
isGoodDate :=  ALLTRIM( DTOC( dDate ) ) == ALLTRIM( cFecha )
 



Reinaldo.
User avatar
reinaldocrespo
 
Posts: 979
Joined: Thu Nov 17, 2005 5:49 pm
Location: Fort Lauderdale, FL

Re: Control fecha

Postby FiveWiDi » Mon Aug 06, 2012 11:23 pm

Muchas gracias a ambos, me quedo con la de Reinaldo.

Este foro es una joya.

Gracias.
Un Saludo
Carlos G.

FiveWin 24.02 + Harbour 3.2.0dev (r2403071241), BCC 7.7 Windows 10
FiveWiDi
 
Posts: 1200
Joined: Mon Oct 10, 2005 2:38 pm

Re: Control fecha

Postby Armando » Tue Aug 07, 2012 12:45 am

FiveWidi:

Ahí te va otra

LOCAL dFecha := CTOD(" / / ")

IF EMPTY(dFecha := CTOD("30/02/2012"))
MsgStop("Fecha erronea !")
ENDIF

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3234
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Control fecha proba esto.

Postby juan carlos bellucci » Tue Aug 07, 2012 9:34 am

Si no tenes la libreria o usas xharbour este pequeño programa te resuelve tu problema

Puedes escribir de la siguiente forma

Local fFecha := CTOD("03/02/2012") // la fecha que tu quieres consultar
Local uFecha := Date() // le das forma a la variable
uFecha := UltimoDia( fFecha ) // aqui la funcion te devuelve la fecha con el ultimo dia del mes


//---------------------------------------------------------------------------//
// Method UltimoDia( ) Retorna el el final de un mes
//--------------------------------------------------------------------------//
Function UltimoDia(xFecha)
Local xMes := Month( xFecha )
Local xAno := Year( xFecha )
Local nDias := 1
Local MiFecha := Date()
MiFecha := CTOD("01/"+StrZero(Month(xFecha),2)+"/"+StrZero(Year(xFecha),4))
Do While nDias < 31
MiFecha := MiFecha + 1
If Month( MiFecha ) > xMes
Exit
EndIf
nDias := nDias + 1
If nDias = 31
Exit
EndIF
EndDo
MiFecha := CTOD( StrZero(nDias,2)+"/"+StrZero(xMes,2)+"/"+StrZero(xAno,4) )

Return( MiFecha )
//--------------------------------------------------------------------------//
juan carlos bellucci
 
Posts: 115
Joined: Sat Mar 07, 2009 9:36 pm
Location: Argentina

Re: Control fecha

Postby reinaldocrespo » Tue Aug 07, 2012 12:35 pm

Solo para que les sirva de información, no hace falta escribir funciones para buscar el último día del mes.
Si lo que se busca es el último día del mes, Harbour ya tiene una función nativa: EoM( dDate ) devuelve el último día del mes dDate. Si lo que se busca el es primer día del mes, Harbour ya tiene una función nativa: BoM( dDate ) devuelve el primer día del mes. Igual existe EoQ (end of quarter), EoY (end of Year)....

Pero no me parece que esto es lo que se pregunta en este hilo.

Saludos,


Reinaldo.
User avatar
reinaldocrespo
 
Posts: 979
Joined: Thu Nov 17, 2005 5:49 pm
Location: Fort Lauderdale, FL

Re: Control fecha

Postby acuellar » Tue Aug 07, 2012 4:23 pm

Juan Carlos

Para sacar el último día podes usar esta función
Code: Select all  Expand view  RUN

DaysInMonth(Month(Date()))
 


Saludos,

Adhemar
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1644
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Control fecha

Postby colthop » Wed Aug 08, 2012 7:57 am

Si lo que estas buscando es el último día del mes y sabes el mes y el año, lo que yo hago es al 1 del mes siguiente le resto 1, excepto si el mes es 12 que se que son siempre 31.

En tu caso lo que haría es:
Code: Select all  Expand view  RUN

cmonth = 2
cyear = 2012

if cmonth = 12
  cfecha = ctd("31/12/" + str(cyear,4,0))
else
  cfecha = ctod("01/" + str(cmonth+1,2,0) +"/" + str(cyear,4,0)) - 1
endif
 


Un saludo y espero que te sirva

Carlos
Colt Hop ED, S.L.
Carlos Blas Fernández Domínguez
Tlfo: 645847093
E-Mail: carlos@colthop.es

Nunca se termina de aprender, por eso necesito siempre ayuda.
colthop
 
Posts: 505
Joined: Sat Apr 22, 2006 9:09 am
Location: Madrid - España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 76 guests