• Domingo 22 de Diciembre de 2024, 23:28

Autor Tema:  Re: Algo facilito  (Leído 1318 veces)

mutanab

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Algo facilito
« en: Jueves 20 de Noviembre de 2003, 16:28 »
0
¿Existe alguna funcion a la cual le paso el dia del año actual y me lo convierta en fecha?

Es decir le digo 278 y me devuelve 05/10/2003.

Muchas gracias

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Algo facilito
« Respuesta #1 en: Jueves 20 de Noviembre de 2003, 17:44 »
0
Hola mutanab.

Ahora mismo no sé si existe tal función en vb, pero puedes crear tú una de este estilo:

Public Function CvtDiasAFecha(Byval Dias as Integer) As String
Dim intMes As Integer, intDia As Integer
Dim varDiasMes() As Variant
varDiasMes = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
If DateDiff("d", "1/2/" & Year(Now), "1/3/" & Year(Now)) = 29 Then
varDiasMes(1) = 29
intDia = 366
Else
intDia = 365
End If
If Dias > intDia Then Exit Function
Dim int1 As Integer
For int1 = 0 To 11
If Dias <= varDiasMes(int1) Then
intMes = int1 + 1
intDia = Dias
Exit For
Else
Dias = Dias - varDiasMes(int1)
End If
Next int1
CvtDiasAFecha = intDia & "/" & intMes & "/" & Year(Now)
End Function

Simple, ¿no? Puedes observar que la función funciona sólo para el año actual sin aceptar más de 365 ó 366 días segun el año sea o no bisiesto. Si quieres que pueda calcular fechas de otros años, ya sabes... te tendrás que currar algo más la función, que no se puede pedir todo hecho.

De todas formas, si te enterás de si ya existe alguna función para hacer esto, no dudes en hacerlo saber al foro.

Suerte.

mutanab

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Algo facilito
« Respuesta #2 en: Lunes 24 de Noviembre de 2003, 16:55 »
0
Muchas gracias, es similar a lo que yo tengo. Simplemente queria ahorrar lineas.

Os paso el caso contrario:

Function CvtFechaDias(Fecha)
    Dim Ano
    Dim Dia
    Dim Mes
    Dim varDiasMes
    Ano = Year(Fecha)
    Mes = Month(Fecha)
    Dia = Day(Fecha)
    If Ano Mod 4 = 0 Then 'Año bisiesto
        varDiasMes = Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
    Else
        varDiasMes = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
    End If
    For i = 0 To Mes - 2
        NumDias = NumDias + varDiasMes(i)
    Next i
    CvtFechaDias = NumDias + Dia
End Function

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Algo facilito
« Respuesta #3 en: Lunes 24 de Noviembre de 2003, 17:21 »
0
Ok mutanab.

Aunque no es relativamente importante, ojo con el control de años bisiesto que haces, pues no es del todo correcto, no todos los años múltiplos de 4 son bisiestos... los años múltiplos de 100 no son bisiestos, excepto si son también multiplos de 400.

Cosas de los ajustes de calendario...

Chao.