Lo que tendremos que hacer es simplemente usar la evaluación en línea que ofrece VFP:
************************************************************************** * Function: STOD() * Convierte una cadena en formato AAAMMDD al tipo de datos Date de VFP. * Parameters: tcFecha --> La fecha en formato AAAMMDD, de tipo caracter. * Returns: * + La fecha correspondiente con tipo de datos Fecha (Date de VFP) * + .NULL. en caso de haber error, o no cumplir con los * requerimentos * Developer: Esparta Palma * Uso: * lcFecha = "20060920" && 20 de Septiembre de 2006 como cadena * ldFecha = STOD(lcFecha) ************************************************************************** Function STOD(tcFecha) LOCAL ldFecha ldFecha = .NULL. IF (Vartype(tcFecha)=="C") AND (NOT EMPTY(tcFecha)) ; AND (NOT IsNull(tcFecha)) TRY ldFecha = EVALUATE("{^"+TRANSFORM(tcFecha,"@R 9999-99-99")+"}") CATCH TO oError ?oError.Message ldFecha = NULL ENDTRY ENDIF Return ldFecha EndFuncLa cuestión principal es formar la fecha en el formato necesario para evaluarla, por ello el uso de la función Transform(), la cuál, hará un cambio de por ejemplo: "20060920" a "2006-09-20", a partir de ahí sumamos los caracteres iniciales y finales, quedando una cadena (siguiendo el ejemplo): "{^2006-09-20}", solo resta aplicar una evaluación en tiempo de ejecución, con lo que así tendremos nuestro tipo de datos fecha.
Nota: El código está optimizado para VFP8 y posteriores, ya que usa el control de errores en bloques TRY..CATCH, si usas una versión anterior simplemente remueve ese bloque y usa tu propia rutina de captura de errores.
Espero les sea de utilidad.
Espartaco Palma Martínez
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.