Noticias:

Ya hay algunas cosas colgadas en la web así que ya vuelve a estar disponible.

Menú Principal

Convertir a fecha

Iniciado por xavi, Diciembre 10, 2022, 07:58:38 PM

Tema anterior - Siguiente tema

xavi

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