Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    154

    [VB6] Numero settimana

    Ciao a tutti
    Sapreste indicarmi il sistema per farmi restituire il numero della settimana (da 1 a 52) fornendo il giorno?

    es: oggi 11/09/2006 è nella 37a settimana

    E' possibile, di conseguenza, farsi restituire i giorni corrispondenti alla settimana?

    es: 37a settimana >> dal 11/09/2006 al 15/09/2006 (lavorativi)

    Grazie mille fin d'ora
    Luca
    ...Spesso "chi sà" è chi ha l'umiltà di domandare e il coraggio di dare risposte... Luca
    webmaster@resruote.com

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    154
    Nessuna idea?
    ...Spesso "chi sà" è chi ha l'umiltà di domandare e il coraggio di dare risposte... Luca
    webmaster@resruote.com

  3. #3
    Ciao, per il primo problema puoi fare così:

    codice:
        Function DateToWeek(ByVal giorno, mese As Integer) As Integer
           Dim giornoT, week As Integer 'indica in che giorno ci troviamo nell'anno (1 to 365)
    
        giornoT = giorno + 30 * (mese - 1) 'valore approssimato, prendo tutti i mesi di 30 giorni
        week = Int(giornoT / 7 + 1)
        DateToWeek = week
    
        End Function
    per il secondo così:

    codice:
        
    Function WeekToDate(ByVal week As Integer) As String
            Dim giornoT, mese, giorno As Integer
            
            giornoT = week * 7
            mese = Int(giornoT / 30) + 1 'sempre approssimato
            
            WeekToDate = "da 1/" & mese & "/2006 a 30/" & mese & "/2006"
            
        End Function
    però i risultati saranno approssimati visto che ho considerato tutti mesi di 30 giorni.
    A questo punto dovresti intervenire aggiungendo alcuni controlli e condizioni per rendere le funzioni più precise, cmq questo è il procedimento in linea generale.

    Ciao, ciao

  4. #4
    Utente di HTML.it L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,752
    mi sembra che esistesse datepart :master:
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    154
    Vi ringrazio tutti, molto gentili.
    Mentra aspettavo le risposte ho trovato sul web la soluzione al mio problema. Ve la posto anche a Voi

    Function WeekNumber(InDate As Date) As Integer
    Dim DayNo As Integer
    Dim StartDays As Integer
    Dim StopDays As Integer
    Dim StartDay As Integer
    Dim StopDay As Integer
    Dim VNumber As Integer
    Dim ThurFlag As Boolean

    DayNo = Days(InDate)
    StartDay = Weekday(DateSerial(Year(InDate), 1, 1)) - 1
    StopDay = Weekday(DateSerial(Year(InDate), 12, 31)) - 1
    ' Number of days belonging to first calendar week
    StartDays = 7 - (StartDay - 1)
    ' Number of days belonging to last calendar week
    StopDays = 7 - (StopDay - 1)
    ' Test to see if the year will have 53 weeks or not
    If StartDay = 4 Or StopDay = 4 Then ThurFlag = True Else ThurFlag = False
    VNumber = (DayNo - StartDays - 4) / 7
    ' If first week has 4 or more days, it will be calendar week 1
    ' If first week has less than 4 days, it will belong to last year's
    ' last calendar week
    If StartDays >= 4 Then
    WeekNumber = Fix(VNumber) + 2
    Else
    WeekNumber = Fix(VNumber) + 1
    End If
    ' Handle years whose last days will belong to coming year's first
    ' calendar week
    If WeekNumber > 52 And ThurFlag = False Then WeekNumber = 1
    ' Handle years whose first days will belong to the last year's
    ' last calendar week
    If WeekNumber = 0 Then
    WeekNumber = WeekNumber(DateSerial(Year(InDate) - 1, 12, 31))
    End If
    End Function

    Function Days(DayNo As Date) As Integer
    Days = DayNo - DateSerial(Year(DayNo), 1, 0)
    End Function


    L'ho già provato e funziona. Adesso ci ragiono un po' per provare ad ottenere il contrario ovvero il range dei giorni da lunedì a venerdì partendo dal numero della settimana

    Ringrazio nuovamente CIAO
    ...Spesso "chi sà" è chi ha l'umiltà di domandare e il coraggio di dare risposte... Luca
    webmaster@resruote.com

  6. #6
    Guarda che come ha detto wallrider basta usare la funzione datepart:
    codice:
    Dim settimana As Integer
    settimana=DatePart(ww, Now())
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    154
    Hai ragione mi sono complicato la vita.....
    E per ottenere il contrario allora?
    Cioè ho in numero della settimana (e dell'anno ovviamente) e vorrei sapere il lunedì e il venerdì (dd/mm/yyyy) di quella settimana.
    Aspetto una vostra risposta prima di imbattermi su sfilze di codice inutile
    ...Spesso "chi sà" è chi ha l'umiltà di domandare e il coraggio di dare risposte... Luca
    webmaster@resruote.com

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    154
    Forse non sono stato molto chiaro rileggendo la mia domanda.
    La ripongo.
    Se io ho il numero della settimana, poniamo "37" come posso ottenere il lunedì e il venerdì della settimana corrispondente?
    In questo caso "lun 11/09/2006 - ven 15/09/2006"
    Grazie fin d'ora
    Ciao
    Luca
    ...Spesso "chi sà" è chi ha l'umiltà di domandare e il coraggio di dare risposte... Luca
    webmaster@resruote.com

  9. #9
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Ciao, ti posto un esempio che puoi adattare alle tue esigenze.
    codice:
    Private Type tWeekDate
       tStartDate As Date
       tEndDate As Date
    End Type
    Dim weekDate As tWeekDate
    
    Private Function NumWeekToDateWeek(numWeek As Integer, Optional anno As Integer = 0) As tWeekDate
       Dim startDate As Date
       Dim endDate As Date
       Dim initDate As Date
       Dim numDay As Byte
       Dim newDate As Date
       
       If anno = 0 Then
          anno = Year(Now)
       End If
       initDate = "01/01/" & anno
       newDate = DateAdd("ww", numWeek - 1, initDate)
       numDay = (Weekday(newDate))
       startDate = DateAdd("w", (2 - numDay), newDate)
       endDate = DateAdd("w", 6, startDate)
       
       NumWeekToDateWeek.tStartDate = startDate
       NumWeekToDateWeek.tEndDate = endDate
    End Function
    
    'USO...
    Private Sub Command2_Click()
       Dim p As tWeekDate
       p = NumWeekToDateWeek(1, 2004)
       MsgBox p.tStartDate & "    " & p.tEndDate
    End Sub
    La funzione restituisce la settimana che va dal lunedi alla domenica... basta passargli il numero della settimana e, opzionale, l'anno di riferimento se diverso dall'anno attuale.
    Jupy

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    154
    Ti ringrazio molto!!!
    Ma, scusa l'ignoranza, dove devo mettere il codice che mi hai postato visto che quando lo lancio mi da errore: "Tipo definito dall'utente non definito" sulla riga "Dim p As tWeekDate"
    Lo metto in un modulo?
    Cioa Luca
    ...Spesso "chi sà" è chi ha l'umiltà di domandare e il coraggio di dare risposte... Luca
    webmaster@resruote.com

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.