Página 1 de 1

Verificar fecha

Publicado: Vie Ene 25, 2013 6:36 pm
por XeviCOMAS
No lo recuerdo, pero... hay alguna función para comprovar si un valor
caracter es una fecha correcta???
De momento lo compruebo así­...
If Day(CtoD(cVariable)) > 0
....
Pero me encuentro en que si compruebo un valor como "01/0000" lo da como
..T., y evidentemente luego me saltan errores.
Gracias.
Un Saludo,
Xevi.

Verificar fecha

Publicado: Vie Ene 25, 2013 6:48 pm
por jlalin
Xevi,
la función CToD() devuelve una fecha vací­a (nula) si no es válida:
http://www.itlnet.net/programming/progr ... e/c53g01c/ ng1acdd.html
Entonces deberí­a bastar con:
IF Empty( CToD( cVariable ) )
Alert( "Fecha no válida" )
ENDIF
Saludos,
José Lalí­n

Verificar fecha

Publicado: Vie Ene 25, 2013 7:27 pm
por XeviCOMAS
José,
Gracias, funciona perfecta.
Así­ pues...
FUNCTION IsDate(c)
Return !Empty(CToD(c))
La incorporo en mi aplicación... aunque, tratándose de una "sencilla"
función,
¿no seria mejor que alguien la incorporara en Harbour???, digo yo, no se. A
mi me sirve así­, pero hay funciones que con lo sencillas que son (Visual
Basic tiene esa misma IsDate())... parece que no estarí­a de mas
incorporarla.
Un Saludo,
Xevi.
"José Lalí­n" ha escrit al missatge:5102c4b9$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Xevi,
la función CToD() devuelve una fecha vací­a (nula) si no es válida:
http://www.itlnet.net/programming/progr ... e/c53g01c/ ng1acdd.html
Entonces deberí­a bastar con:
IF Empty( CToD( cVariable ) )
Alert( "Fecha no válida" )
ENDIF
Saludos,
José Lalí­n

Verificar fecha

Publicado: Vie Ene 25, 2013 7:40 pm
por XeviCOMAS
José,
Demasiado deprisa!!!
FUNCTION IsDate(c)
Return !Empty(CToD(c))
No sirve!!!
LogDebug( "01/0001", IsDate( "01/0001" ) )
LogDebug( "01/0001/01", IsDate( "01/0001/01" ) )
LogDebug( "01/0001/01/01", IsDate( "01/0001/01/01" ) )
en los 3 casos devuelve .T.
Evidentemente no son fechas...
Habrá que currarse una función IsDate()
¿NO???
Un Saludo,
Xevi.
"Xevi" ha escrit al missatge:5102ce89$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
José,
Gracias, funciona perfecta.
Así­ pues...
FUNCTION IsDate(c)
Return !Empty(CToD(c))
La incorporo en mi aplicación... aunque, tratándose de una "sencilla"
función,
¿no seria mejor que alguien la incorporara en Harbour???, digo yo, no se. A
mi me sirve así­, pero hay funciones que con lo sencillas que son (Visual
Basic tiene esa misma IsDate())... parece que no estarí­a de mas
incorporarla.
Un Saludo,
Xevi.
"José Lalí­n" ha escrit al missatge:5102c4b9$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Xevi,
la función CToD() devuelve una fecha vací­a (nula) si no es válida:
http://www.itlnet.net/programming/progr ... e/c53g01c/ ng1acdd.html
Entonces deberí­a bastar con:
IF Empty( CToD( cVariable ) )
Alert( "Fecha no válida" )
ENDIF
Saludos,
José Lalí­n

Verificar fecha

Publicado: Vie Ene 25, 2013 7:54 pm
por jlalin
Xevi,
creo que Harbour tiene de serie IsDate().
Saludos,
José Lalí­n

Verificar fecha

Publicado: Vie Ene 25, 2013 8:04 pm
por XeviCOMAS
José,
Pues existir en Harbour, existe, pues compila.
Ahora bien
LogDebug( "01/0001", IsDate( "01/0001" ) )
LogDebug( "01/0001/01", IsDate( "01/0001/01" ) )
LogDebug( "01/0001/01/01", IsDate( "01/0001/01/01" ) )
LogDebug( "01010001", IsDate( "01010001" ) )
LogDebug( "01-01-0001", IsDate( "01-01-0001" ) )
LogDebug( "01/01/01", IsDate( "01/01/01" ) )
LogDebug( "01/01/2001", IsDate( "01/01/2001" ) )
LogDebug( "32/01/2001", IsDate( "32/01/2001" ) )
LogDebug( "01/15/2001", IsDate( "01/15/2001" ) )
Siempre devuelve .F.
la única documentación que encuentro...
C Prototype (macro definition)
#include "hbapi.h"
ISDATE( n ) --> <see ( hb_param( n, HB_IT_DATE ) != NULL )>
¿Cómo se utiliza???
Un Saludo,
Xevi.
"José Lalí­n" ha escrit al missatge:5102d449$[email=2@svctag-j7w3v3j....]2@svctag-j7w3v3j....[/email]
Xevi,
creo que Harbour tiene de serie IsDate().
Saludos,
José Lalí­n

Verificar fecha

Publicado: Vie Ene 25, 2013 8:35 pm
por jlalin
Xevi,
> ¿Cómo se utiliza???
Con mucho cuidado ;-) Imagino que el problema está en que hay que
convertirla a fecha con CToD() antes de pasarla.
Saludos,
José Lalí­n

Verificar fecha

Publicado: Vie Ene 25, 2013 9:02 pm
por XeviCOMAS
José,
lo he hecho despaciiiiiito...
Le he añadido la conversión a fecha...
Pero no funciona.
LogDebug( "01/0001", IsDate( CToD( "01/0001" ) ))
LogDebug( "01/0001/01", IsDate( CToD( "01/0001/01" ) ) )
LogDebug( "01/0001/01/01", IsDate( CToD( "01/0001/01/01" ) ) )
LogDebug( "01010001", IsDate( CToD( "01010001" ) ) )
LogDebug( "01-01-0001", IsDate( CToD( "01-01-0001" ) ) )
LogDebug( "01/01/01", IsDate( CToD( "01/01/01" ) ) )
LogDebug( "01/01/2001", IsDate( CToD( "01/01/2001" ) ) )
LogDebug( "32/01/2001", IsDate( CToD( "32/01/2001" ) ) )
LogDebug( "01/15/2001", IsDate( CToD( "01/15/2001" ) ) )
Siempre devuelve .T.
Un Saludo,
Xevi.
"José Lalí­n" ha escrit al missatge:5102de0e$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Xevi,
> ¿Cómo se utiliza???
Con mucho cuidado ;-) Imagino que el problema está en que hay que
convertirla a fecha con CToD() antes de pasarla.
Saludos,
José Lalí­n

Verificar fecha

Publicado: Vie Ene 25, 2013 9:15 pm
por jlalin
Xevi,
> lo he hecho despaciiiiiito...
¿y con cariño y HB_IsDate()?
Saludos,
José Lalí­n

Verificar fecha

Publicado: Vie Ene 25, 2013 9:52 pm
por XeviCOMAS
José,
Ni despacito, ni con cariño
....
LogDebug( "01/0001", HB_IsDate( CToD( "01/0001" ) ))
LogDebug( "01/0001/01", HB_IsDate( CToD( "01/0001/01" ) ) )
LogDebug( "01/0001/01/01", HB_IsDate( CToD( "01/0001/01/01" ) ) )
LogDebug( "01010001", HB_IsDate( CToD( "01010001" ) ) )
LogDebug( "01-01-0001", HB_IsDate( CToD( "01-01-0001" ) ) )
LogDebug( "01/01/01", HB_IsDate( CToD( "01/01/01" ) ) )
LogDebug( "01/01/2001", HB_IsDate( CToD( "01/01/2001" ) ) )
LogDebug( "32/01/2001", HB_IsDate( CToD( "32/01/2001" ) ) )
LogDebug( "01/15/2001", HB_IsDate( CToD( "01/15/2001" ) ) )
Devuelve todo .T.
LogDebug( "01/0001", HB_IsDate( "01/0001" ) )
LogDebug( "01/0001/01", HB_IsDate( "01/0001/01" ) )
LogDebug( "01/0001/01/01", HB_IsDate( "01/0001/01/01" ) )
LogDebug( "01010001", HB_IsDate( "01010001" ) )
LogDebug( "01-01-0001", HB_IsDate( "01-01-0001" ) )
LogDebug( "01/01/01", HB_IsDate( "01/01/01" ) )
LogDebug( "01/01/2001", HB_IsDate( "01/01/2001" ) )
LogDebug( "32/01/2001", HB_IsDate( "32/01/2001" ) )
LogDebug( "01/15/2001", HB_IsDate( "01/15/2001" ) )
Devuelve todo .F.
Un Saludo,
Xevi,
"José Lalí­n" ha escrit al missatge:5102e780$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
Xevi,
> lo he hecho despaciiiiiito...
¿y con cariño y HB_IsDate()?
Saludos,
José Lalí­n

Verificar fecha

Publicado: Sab Ene 26, 2013 11:55 am
por jlalin
Xevi,
entonces tendrás que hacer una.
Saludos,
José Lalí­n

Verificar fecha

Publicado: Dom Ene 27, 2013 10:49 am
por XeviCOMAS
De momento me he creado una para mis necesidades...
//---------------------------------------------------------- --------------------
FUNCTION xIsDate(c)
Local cDateFormat := Set( _SET_DATEFORMAT )
Local nLenDateFormat := Len(cDateFormat)
Local n, lFormatN := .T.
If ValType(c) = "C" .and. nLenDateFormat = Len(c)
lFormatN := .T.
For n:=1 to nLenDateFormat
IF (Chr(SubStr(cDateFormat,n,1)) = 100 .or.
Chr(SubStr(cDateFormat,n,1)) = 109 .or. Chr(SubStr(cDateFormat,n,1)) = 121)
// "d" "m" "y"
If !(Chr(SubStr(c,n,1)) > 47 .and. Chr(SubStr(c,n,1)) < 58)
//"0123456789"
lFormatN := .F.
EndIf
EndIf
Next
If lFormatN
Return !Empty(CToD(c))
EndIf
EndIf
Return .F.
***
Para validar la fecha debe pasarse una variable tipo caracter que se
corresponda con el formato SET() que tenemos establecida en la aplicación.
Estos formatos los comprueba correctamente.
***
METHOD FormInitialize( oSender ) CLASS TForm1
Set( _SET_DATEFORMAT, "dd/mm/yyyy" )
LogDebug( "01/0001", xIsDate( "01/0001" ) )
LogDebug( "01/0001/01", xIsDate( "01/0001/01" ) )
LogDebug( "01/0001/01/01", xIsDate( "01/0001/01/01" ) )
LogDebug( "01010001", xIsDate( "01010001" ) )
LogDebug( "01-01-0001", xIsDate( "01-01-0001" ) )
LogDebug( "01/01/01", xIsDate( "01/01/01" ) )
LogDebug( "00/01/2001", xIsDate( "00/01/2001" ) )
LogDebug( "01/01/2001", xIsDate( "01/01/2001" ) )
LogDebug( "32/01/2001", xIsDate( "32/01/2001" ) )
LogDebug( "01/15/2001", xIsDate( "01/15/2001" ) )
LogDebug( "ABC", xIsDate( "ABC" ) )
LogDebug( "ABCabc1234", xIsDate( "ABCabc1234" ) )
RETURN Nil
SE PUEDE MEJORAR... CLARO QUE SI!!!, pero de momento salvo el obstáculo.
Un Saludo,
Xevi.
"José Lalí­n" ha escrit al missatge:5103b5fa$[email=2@svctag-j7w3v3j....]2@svctag-j7w3v3j....[/email]
Xevi,
entonces tendrás que hacer una.
Saludos,
José Lalí­n