30 de diciembre de 2005

Convertir una expresión de caracteres en una expresión de fecha

Considerando que la función CTOD( ) no es segura, creé esta función para convertir una expresión de caracteres - fecha en formato corto - en una expresión de fecha.

Según la propia ayuda de VFP: "Nota: CTOD( ) puede crear valores ambiguos de fecha y generar un error de compilación...", entonces, como estoy importando datos que están en EXCEL necesité de esta función que, tal vez, pueda serle útil a otros.

Sintaxis:
StrToDate(cExpresion, cFormatoDeFecha)
Parámetros:
  • cExpresion: Especifica una expresión de caracteres.
  • cFormatoDeFecha: especifica el formato en el cual se encuetra cExpresion.
Ejemplo de uso:
? StrToDate("2004/5/30";"a/m/d")
? StrToDate("2004-5-30";"a-m-d")
? StrToDate("04.5.30","a.m.d";)
? StrToDate("30/5/4";"d/m/a")
Function StrToDate
    Lparameters lcFecha,lcFormatOrig
    Local ARRAY laFec(3)
    Local nn, lcEstr
    lcDelim = Iif(GetWordCount(lcFormatOrig,"/") = 3, "/", ;
      Iif(GetWordCount(lcFormatOrig,"-") = 3, "-", ;
      Iif(GetWordCount(lcFormatOrig,".") = 3, ".","")))
    If Empty(lcDelim)
       Return {}
       *-- puede ser mejor devolver .f. para provocar un error
    EndIf
    lcFormatOrig = Lower(lcFormatOrig) && por si acaso
    For nn = 1 to 3
        lcEstr = GetWordNum(lcFormatOrig,nn,lcDelim)
        laFec(Iif(lcEstr="a",1,Iif(lcEstr="m",2,3)))=Val(GetWordNum(lcFecha,nn,lcDelim))
    EndFor
    *-- Por si el año se haya escrito abreviado (se interpreta del siglo XXI)
    *-- se puede mejorar esta parte comprobando SET CENTURY TO ROLLOVER
    If Len(Alltrim(Str(laFec(1)))) > 4
       laFec(1)=2000 + laFec(1)
    EndIf
    Return Date(laFec(1),laFec(2),laFec(3))
EndFunc
Mario Esquivel Bado

No hay comentarios. :

Publicar un comentario