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.
? 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
