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)) EndFuncMario Esquivel Bado