tincho   28-02-2024, 12:36
#1
Hola, a raíz de una pregunta de un compañero del foro, sobre la obtención de fechas a partir de cadenas de texto, hice una función que creo que resuelve el problema.
Espero que se diviertan mejorandola como me divertí yo creándola.
Código:
'' Returns the date from a string, if mode is not pased the deafult values is DMY

Public Function toDate(s As String, Optional sMode As String = "DMY") As Date

  Dim p As Integer '' position of the year 0 or 2
  Dim a As String[]
  Dim dt As Date
  Dim ix As Integer

  If InStr(s, " ") Then
    s = Split(s, " ")[0]
  Endif

  If InStr(s, "/") > 0 Or InStr(s, "-") > 0 Then
    If InStr(s, "/") > 0 Then
      a = Split(s, "/")
    Else
      a = Split(s, "-")
    Endif

    For ix = 0 To a.Max
      If Len(a[ix]) = 1 Then
        a[ix] = "0" & a
      Endif
    Next

    If Len(a[0]) = 4 Then
      dt = Date(CInt(a[0]), CInt(a[1]), CInt(a[2])) ' ISO
    Else
      If Len(a[0]) = 2 And Len(a[1]) = 2 And Len(a[2]) = 2 Then
        ' Acá esta el problema pues la fecha puede ser MM/DD/YY (EEUU),  DD/MM/YY (Europa), YY/MM/DD (Japón)
        Select Upper(sMode)
          Case "DMY" ' Europe
            dt = Date(CInt(a[2]), CInt(a[1]), CInt(a[0]))
          Case "MDY" ' EEUU
            dt = Date(CInt(a[2]), CInt(a[0]), CInt(a[1]))
          Case "YMD" ' Japón
            dt = Date(CInt(a[0]), CInt(a[1]), CInt(a[0]))
        End Select
      Endif
    Endif
  Endif

  Return dt

End
Última modificación: 04-03-2024, 21:12 por tincho.

1 Saludo.
Grandamakulo   29-02-2024, 12:34
#2
Está genial.
Sólo un matiz tonto que no tiene que ver con la función: "YMD" no sólo es de japón, es la norma internacional que hoy en día rige la escritura de calendarios. Y que, por supuesto, todo el mundo se pasa por el forrrrr····, esto..., que se obvia en general.
Insisto, estupenda función, que usaré bastante.

PS.—En la línea 23 se te ha ido un índice de renglón Wink
Última modificación: 29-02-2024, 12:35 por Grandamakulo.

En un lugar de La Mancha de cuyo nombre me acuerdo perfectamente...
guizans   29-02-2024, 23:27
#3
Gracias Tincho por el curro, me guardo la función para futuros usos.

Un saludo.
jguardon   01-03-2024, 21:36
#4
(Offtopic)

(29-02-2024, 12:34)Grandamakulo escribió: .—En la línea 23 se te ha ido un índice de renglón

No, es un problema conocido con el resaltado de sintaxis del foro, que interpreta la "i" entre corchetes como el modificador de cursiva. Hay que acostumbrarse a no ponerlo como índice de iterador, usando otra letra o mejor una palabra.

Hay otras letras que también son potencialmente desaconsejables: "b" para negrita, "u" para subrayado y "s" para tachado. Si se usan como nombre de variable de índice, cuando van entre corchetes el sistema lo interpreta como MyCode en el foro y genera la etiqueta de cierre, dejando el código a veces inservible.

Saludos

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
  
Usuarios navegando en este tema: 3 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.