Comunidad Gambas-es
Fecha a partir de un String - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: Aplicaciones/Fragmentos de Código (https://gambas-es.org/forum-8.html)
+--- Tema: Fecha a partir de un String (/thread-1618.html)



Fecha a partir de un String - tincho - 28-02-2024

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



RE: Fecha a partir de un String - Grandamakulo - 29-02-2024

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


RE: Fecha a partir de un String - guizans - 29-02-2024

Gracias Tincho por el curro, me guardo la función para futuros usos.

Un saludo.


RE: Fecha a partir de un String - jguardon - 01-03-2024

(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