In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Verificar fecha

Foro de Xailer profesional en español
Responder
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Verificar fecha

Mensaje 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.
Un Saludo,
Xevi.
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Verificar fecha

Mensaje 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
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Verificar fecha

Mensaje 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
Un Saludo,
Xevi.
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Verificar fecha

Mensaje 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
Un Saludo,
Xevi.
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Verificar fecha

Mensaje por jlalin »

Xevi,
creo que Harbour tiene de serie IsDate().
Saludos,
José Lalí­n
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Verificar fecha

Mensaje 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
Un Saludo,
Xevi.
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Verificar fecha

Mensaje 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
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Verificar fecha

Mensaje 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
Un Saludo,
Xevi.
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Verificar fecha

Mensaje por jlalin »

Xevi,
> lo he hecho despaciiiiiito...
¿y con cariño y HB_IsDate()?
Saludos,
José Lalí­n
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Verificar fecha

Mensaje 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
Un Saludo,
Xevi.
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Verificar fecha

Mensaje por jlalin »

Xevi,
entonces tendrás que hacer una.
Saludos,
José Lalí­n
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

Verificar fecha

Mensaje 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
Un Saludo,
Xevi.
Responder