Palabras clave: convertir, fecha, formato
Autor: xavi
Necesidad
Convertir en fecha una cadena de texto que puede venir en distintos formatos (ddmmyy o yyyymmdd, por ejemplo)
Function fntConvierteFecha(strFecha As String, strFormato As String) As Date
Dim iniAño As Integer
Dim iniMes As Integer
Dim iniDia As Integer
Dim lenAño As Integer
Const lenMes As Integer = 2
Const lenDia As Integer = 2
' Función que toma cualquier formato que se pase como argumento para devolver una gfecha
' El separador no tiene porqué coincidir con elde la fecha; bastará con cualquier caracter, incluso un espacio.
' Ejemplo: fntConvierteFecha("22-25-12", "yy dd mm") devuelve el dia de navidad del 2022
' Solo podemos admitir formatos que contengan "dd", "mm" y "yy" (por lo menos 2 'y')
' Empezamos por "dd"
If InStr(1, strFormato, "dd") = 0 Then
MsgBox "El formato pasado como argumento no es admisible.", vbExclamation, "Error"
fntConvierteFecha = Empty
Exit Function
End If
' Seguimos por "mm"
If InStr(1, strFormato, "mm") = 0 Then
MsgBox "El formato pasado como argumento no es admisible.", vbExclamation, "Error"
fntConvierteFecha = Empty
Exit Function
End If
' Acabamos por "yy"
' venga como yy o como yyyy, por lo menos yy debe existir
If InStr(1, strFormato, "yy") = 0 Then
MsgBox "El formato pasado como argumento no es admisible.", vbExclamation, "Error"
fntConvierteFecha = Empty
Exit Function
End If
' En este punto ya podemos tratar cualquier cosa
iniAño = InStr(1, strFormato, "y")
iniMes = InStr(1, strFormato, "m")
iniDia = InStr(1, strFormato, "d")
lenAño = IIf(InStr(1, strFormato, "yyyy") > 0, 4, 2)
fntConvierteFecha = DateSerial(Mid(strFecha, iniAño, lenAño), Mid(strFecha, iniMes, lenMes), Mid(strFecha, iniDia, lenDia))
End Function