** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Función para saber la fecha del lunes de semana
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoFunción para saber la fecha del lunes de semana

 Responder Responder
Autor
Mensaje
pascual14 Ver desplegable
Colaborador
Colaborador


Unido: 30/Junio/2014
Localización: madrid
Estado: Sin conexión
Puntos: 530
Enlace directo a este mensaje Tema: Función para saber la fecha del lunes de semana
    Enviado: 20/Febrero/2020 a las 14:06
Hola amigos, hay alguna forma de saber la fecha del primer día de una semana ISO, es decir si quiero saber el primer día de la semana 8 del 2020 que me dé el 17/02/2020. No encuentro como hacerlo. Gracias. 
Arriba
Maverick2019 Ver desplegable
Habitual
Habitual


Unido: 10/Junio/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 145
Enlace directo a este mensaje Enviado: 20/Febrero/2020 a las 15:10
Hola
Según este link (https://en.wikipedia.org/wiki/ISO_week_date#First_week), la primera semana del año es aquella que contiene el jueves. Es dercir, la primera que contiene cuatro dáis.
Dicho esto, lo que tienes que hacer es calcular que semana es la que contiene el uno de enero del año que quieras calcular. Una vez hecho, sumas las semanas que quieras, ves que día de la semana es el resultante y calculas que fecha es el lunes correspondiente.
Yo he hecho esto:

Public Function PrimerDiaSemanaXX(lAno As Long, iSemana As Integer) As Date
    Dim dFecha As Date, iNumSemana As Integer, iDiaSemana As Integer
    dFecha = DateSerial(lAno, 1, 1)
    iNumSemana = DatePart("ww", dFecha, vbMonday, vbFirstFourDays)
    If iNumSemana = 1 Then
        dFecha = DateAdd("ww", iSemana - 1, dFecha)
    Else
        dFecha = DateAdd("ww", iSemana, dFecha)
    End If
    
    iDiaSemana = IIf(Weekday(dFecha, vbMonday) = 1, 0, -1 * (Weekday(dFecha, vbMonday) - 1))
    
    If Abs(iDiaSemana) >= 1 Then
        dFecha = DateAdd("d", iDiaSemana, dFecha)
    End If
    
    PrimerDiaSemanaXX = dFecha
End Function

Le pasas como parámetros que año quieres calcular, y que semana. Te devolverá el lunes de esa semana.
Espero te sirva.

Salu2,
Arriba
pascual14 Ver desplegable
Colaborador
Colaborador


Unido: 30/Junio/2014
Localización: madrid
Estado: Sin conexión
Puntos: 530
Enlace directo a este mensaje Enviado: 20/Febrero/2020 a las 17:34
Hola Maverick2019  primero agradecerte la ayuda. Lo he probado pero me devuelve el martes y no consigo solucionarlo ¿puede ser restando 1 el día y funcionará? 
Arriba
Maverick2019 Ver desplegable
Habitual
Habitual


Unido: 10/Junio/2019
Localización: Madrid
Estado: Sin conexión
Puntos: 145
Enlace directo a este mensaje Enviado: 20/Febrero/2020 a las 17:51
Hola
Sí ejecuto para el ño 2020 y la semana 8, me devuelve 17/02/2020, que es el lunes de la semana 8 (primera semana con cuatro días).
¿Que parámetros le pasas a la función?

Salu2,

Arriba
ximo Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 03/Marzo/2006
Localización: España
Estado: Sin conexión
Puntos: 2085
Enlace directo a este mensaje Enviado: 20/Febrero/2020 a las 18:42
hola,
Pasaté, por esta web en cuanto a fechas tienes casí lo que necesites.



Saludos, ximo
La incansable busqueda de información abre nuestras mentes

Saludos desde Burriana
Arriba
pascual14 Ver desplegable
Colaborador
Colaborador


Unido: 30/Junio/2014
Localización: madrid
Estado: Sin conexión
Puntos: 530
Enlace directo a este mensaje Enviado: 20/Febrero/2020 a las 20:32
Perdón Maverick, si que funciona bien, me equivocaba en el tipo de parámetro. Me sirve. Gracias. Ximo muy buen aporte de fechas.
Podéis cerrar el hilo. 
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable