SoloCodigo

Programación General => Visual Basic 6.0 e inferiores => Mensaje iniciado por: mutanab en Jueves 20 de Noviembre de 2003, 16:28

Título: Re: Algo facilito
Publicado por: mutanab en Jueves 20 de Noviembre de 2003, 16:28
¿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
Título: Re: Algo facilito
Publicado por: Brroz en Jueves 20 de Noviembre de 2003, 17:44
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.
Título: Re: Algo facilito
Publicado por: mutanab en Lunes 24 de Noviembre de 2003, 16:55
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
Título: Algo facilito
Publicado por: Brroz en Lunes 24 de Noviembre de 2003, 17:21
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.