Visual Basic - Obtener mes y dia dando numero de semana y año

Life is soft - evento anual de software empresarial
   
Vista:

Obtener mes y dia dando numero de semana y año

Publicado por Aurora (10 intervenciones) el 27/08/2008 19:58:00
Hola! espero puedan ayudarme, saben como puedo obtener el mes ingresando el numero de semana y el año?

Es decir por ejemplo tengo la semana 38 del año 2006... como puedo sacar en visual basic 6 el mes y opcionalmente el dia, obteniendo el mes seria mas facil para mi sacar el dia... pero lo que no tengo idea es como sacar el mes...

Gracias de antemano

Saludos!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
información
Otras secciones de LWP con contenido de Visual Basic
- Código fuente de Visual Basic
- Cursos de Visual Basic
- Temas de Visual Basic
- Chat de Visual Basic
información
Códigos de Visual Basic
- Copiar archivos
- Imprimir textbox
- operaciones

RE:Obtener mes y dia dando numero de semana y año

Publicado por igor (633 intervenciones) el 27/08/2008 22:34:06
Puedes hacer:

(Semana*7)-6=Dias del año.
(38*7)-6 = 260

Restamos 6 para que la primera semana de Dias=1. Luego obtenemos el mes:

Dim Mes as Integer
Select Case Dias
Case 1 to 31
Mes=1
Case 32 to 59
Mes=2
Case 60 to 91
Mes=3
----
Case 334 to 365
Mes=4
End Select

Si empezamos a tener en cuenta los años bisiestos, la cosa empieza a complicarse, ya que son cada 4 años, influye en la cantidad de días y además los años acabados en 00 no son bisiestos, etc.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Obtener mes y dia dando numero de semana y año

Publicado por pacopaz (173 intervenciones) el 27/08/2008 22:38:27
Puedes probar con esto (lo hice muy complejo, pero no tengo cabeza para simplificarlo):

Private Function Mes(Anio, Semana As Integer)
Dim i As Integer
Dim Fec As Date
Fec = CDate("1/1/" & Anio) 'Convierte a fecha el año recibido, como 1 de enero
i = Weekday(Fec) 'Que día fue el primer día del año
If i <> 1 Then i = 9 - i 'Número de día del primer domingo
i = i + ((Semana - IIf(i = 1, 1, 2)) * 7) 'Dias transcurridos hasta el domingo de la semana
If i > 0 Then Fec = DateAdd("d", i, CDate("1/1/" & Anio)) 'Fecha de la semana (domingo)
Mes = Month(Fec) 'Regresa el mes de la fecha
End Function

Espero que te sirva.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Cero y van dos...

Publicado por pacopaz (173 intervenciones) el 27/08/2008 22:41:06
Cero y van dos en el día, mi estimado.
Aunque creo que esta vez mi solución supera a tu rapidez.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No os peleeis!!

Publicado por marchand (59 intervenciones) el 27/08/2008 22:49:26
Vuestro código (el de ambos) hace agua por todos los lados.

Mirad esta función que sí contempla todas las posibilidades:

Function BuscaDiaSemana(iSemana As Integer, iAño As Integer) As Date
Dim dFecha As Date, iNum As Integer
' empezamos por el primer día del año indicado
dFecha = "01/01/" & CStr(iAño)
' comprobar si el año tiene 53 semanas (esto sólo ocurre cuando el primer
' día del año es jueves ó (miércoles y bisiesto)
If DatePart("w", dFecha) = 5 Or (DatePart("w", dFecha) = 4 And DatePart("w", "31/12/" & CStr(iAño)) = 5) Then
iNum = 53
Else
iNum = 52
End If
If iSemana < 1 Or iSemana > iNum Then
MsgBox "Número de semana incorrecto"
Exit Function
End If
Do
If DatePart("ww", dFecha, vbMonday, vbFirstFourDays) = iSemana Then
If iSemana = 1 Then
' si es la primera semana del año y el día diferente de lunes
' le añadimos o restamos los días de diferencia
If DatePart("w", dFecha) <> 2 Then
dFecha = DateAdd("d", -(DatePart("w", dFecha) - 2), dFecha)
End If
End If
BuscaDiaSemana = dFecha
Exit Function
End If
' sumamos un dia a la fecha y continuamos con el bucle
dFecha = DateAdd("d", 1, dFecha)
Loop
End Function

y el código para llamar a la función (desde un command button y en el Text1 le pones la semana y en el Text 2 el año):

Private Sub Command1_Click()
Dim PrimerDia As Date, UltimoDia As Date
PrimerDia = BuscaDiaSemana(Text1, Text2)
UltimoDia = PrimerDia + 6
MsgBox "La semana " & Text1 & " empieza el " & PrimerDia & _
" y termina el " & UltimoDia
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No os peleeis!!

Publicado por Aurora (10 intervenciones) el 27/08/2008 23:21:05
Muchisimas gracias a todos por la ayuda...

Saludos!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:No os peleeis!!

Publicado por igor (633 intervenciones) el 28/08/2008 10:59:31
Me alegro que tengas otra solución para el problema, cuantas más mejor.

Si mi solución hace aguas, lo mandaré a Africa, les será de utilidad, jeje.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cero y van dos...

Publicado por igor (633 intervenciones) el 28/08/2008 10:56:58
No tienes mucho sentido del humor, no?

Solamente bromeaba con el hecho de que a veces coinciden 2 respuestas a la vez. Mientras escribo la respuesta otra persona también lo hace y parece que estemos compitiendo.

No dudo de la calidad de tus respuestas, siempre es un placer tenerte por aquí.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Cero y van dos...

Publicado por pacopaz (173 intervenciones) el 28/08/2008 17:09:41
Mi estimado,
Será que lo mío es el humor ácido, pero en definitiva no es hacer menos las soluciones de nadie, sobretodo las tuyas que normalmente son muy buenas y - sin falsa humildad - reconozco que también he aprendido de ellas.
En realidad este foro esta muy 'competido' (permítanme la expresión), y es justo eso lo que permite tener mejores soluciones para todos, aunque sigue sin excentarse de reventadores.
Ahora, si hacen agua nuestras soluciones, por lo menos no requerirán de 360 iteraciones para llegar a la solución de la semana 52, lo que incluso también es perfectible, más allá de que nosotros hayamos obviemos la validación del número de semana.
Como sea, ojalá que también hicieran cereales, granos y justicia social, para complementar la ayuda a África. Sin embargo, hacemos lo que podemos y si agua hacen, será lo que mandamos.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar