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