Italian Giorni dell'anno senza feste

Discussion in 'Italian Forum' started by Nikeddy, Apr 10, 2018.

  1. Nikeddy

    Nikeddy Active Member Licensed User

    Salve a tutti,

    ho realizzato una piccola app, per i miei giorni lavorativi, e vorrei sapere se esiste una funzione per calcolare i giorni utili del mese, che poi utilizzo per dividere quanto guadagno per i giorni utili, cosi da avere quanto guadagno mediamente al giorno.

    i giorni che mi interessano sono dal lunedi al sabato, escluso tutti i giorni rossi sul calendario, ed essendo di Roma anche il 29 giugno..

    esiste una funzione che li calcola in automatico?

    cosi io se guadagno 1000 euro / (giugno 25 giorni) = 40 euro giorno.

    grazie!!!
     
  2. LucaMs

    LucaMs Expert Licensed User

    Probabilmente trovi qualcosa sul web, compreso forse un sito che fornisca un servizio con questi dati.

    La cosa più complicata è la Pasqua, visto che non cade sempre nello stesso giorno; trovare le domeniche è relativamente facile.

    Per me, comunque, il calcolo è facilissimo: guadagno mensile = 0 / 30 = 0. :p:(
     
  3. LucaMs

    LucaMs Expert Licensed User

  4. LucaMs

    LucaMs Expert Licensed User

  5. Nikeddy

    Nikeddy Active Member Licensed User

  6. Star-Dust

    Star-Dust Expert Licensed User

    Io ho un app più semplice 0€/365giorni= 0€ :)
     
    LucaMs likes this.
  7. LucaMs

    LucaMs Expert Licensed User

    Però non è perfetta, altrimenti ogni 4 anni guadagnerei qualcosa (anni bisestili).

    0 / 365.25
     
  8. LucaMs

    LucaMs Expert Licensed User

  9. LucaMs

    LucaMs Expert Licensed User

    Se non avessi un bel mal di capa (solito), te lo tradurrei io stesso.
     
  10. LucaMs

    LucaMs Expert Licensed User

    Che diavolo dico? Che sia diviso per 365 o 365.25 sempre 0 fa e sempre 0 guadagnerei :p
     
    Star-Dust likes this.
  11. LucaMs

    LucaMs Expert Licensed User

    Devo scoprire che razza di operazione VBA sia:

    (B 4)

    !!!
     
  12. LucaMs

    LucaMs Expert Licensed User

    Temo sia solo un errore di digitazione (ma ripetuto nella stessa funzione???)
     
  13. LucaMs

    LucaMs Expert Licensed User

    Credo che manchi il segno di divisione ("/")
     
  14. LucaMs

    LucaMs Expert Licensed User

    Confermo.

    Infatti il codice della funzione Pasqua, ad esempio, incollato così com'era dava solo errori (in Excel), mentre così funziona:
    Code:
    Public Function Pasqua(ByVal Anno As Integer) As Date
        
    'Il metodo è valido per tutti gli anni nel Calendario Gregoriano,
        'ossia dal 1583 in poi
        
        
    Dim A%, B%, C%, P%, Q%, R%
        
        A = Anno% 
    Mod 19: B = Anno% / 100: C = Anno% Mod 100
        P = (
    19 * A + B - (B / 4) - ((B - ((B + 8) / 25) + 1) / 3) + 15Mod 30
        Q = (
    32 + 2 * ((B Mod 4) + (C / 4)) - P - (C Mod 4)) Mod 7
        R = (P + Q - 
    7 * ((A + 11 * P + 22 * Q) / 451) + 114)
        Pasqua = DateSerial(Anno%, R / 
    32, (R Mod 31) + 1)
        
    End Function
     
  15. udg

    udg Expert Licensed User

  16. LucaMs

    LucaMs Expert Licensed User

    Uhm... devo trovare il bug, perché la conversione VBA -> B4A sembra riuscita ma il risultato è imperfetto:
    Code:
    Public Sub Pasqua(Anno As Int) As String
        
    'Il metodo è valido per tutti gli anni nel Calendario Gregoriano,
        'ossia dal 1583 in poi
        Dim DataPasqua As String
        
    Dim A, B, C, P, Q, R As Int

        A = Anno 
    Mod 19
        B = Anno / 
    100
        C = Anno 
    Mod 100
        P = (
    19 * A + B - (B / 4) - ((B - ((B + 8) / 25) + 1) / 3) + 15Mod 30
        Q = (
    32 + 2 * ((B Mod 4) + (C / 4)) - P - (C Mod 4)) Mod 7
        R = (P + Q - 
    7 * ((A + 11 * P + 22 * Q) / 451) + 114)
        DataPasqua = 
    DateTime.Date(DateUtils.SetDate(Anno, R / 32, (R Mod 31) + 1))
        
    Return DataPasqua
    End Sub
    Per il 2018 restituisce il 30 aprile, mentre è stata il 1°
     
  17. LucaMs

    LucaMs Expert Licensed User

  18. LucaMs

    LucaMs Expert Licensed User

    Quindi, grazie a @udg, la funzione per la Pasqua è ok (usa DateUtils):
    Code:
    Public Sub CalcolaPasqua(Anno As Int) As String
        
    Dim DataPasqua As String

        
    Dim a, b, c, d, e, m, n As Double
        
    Dim giorno As Double
        
    Dim mese As Double

        
    If (Anno <= 2099Then
            m = 
    24
            n = 
    5
        
    Else If (Anno <= 2199Then
            m = 
    24
            n = 
    6
        
    Else If (Anno <= 2299Then
            m = 
    25
            n = 
    0
        
    Else If (Anno <= 2399Then
            m = 
    26
            n = 
    1
        
    Else If (Anno <= 2499Then
            m = 
    25
            n = 
    1
        
    End If

        a = Anno 
    Mod 19
        b = Anno 
    Mod 4
        c = Anno 
    Mod 7
        d = ((
    19 * a) + m) Mod 30
        e = ((
    2 * b) + (4 * c) + (6 * d) + n) Mod 7

        
    If ((d + e) < 10Then
            giorno = d + e + 
    22
            mese = 
    3
        
    Else
            giorno = d + e - 
    9
            mese = 
    4
        
    End If

        
    If (giorno = 26 And mese = 4Then
            giorno = 
    19
            mese = 
    4
        
    End If

        
    If (giorno = 25 And mese = 4 And d = 28 And e = 6 And a > 10Then
            giorno = 
    18
            mese = 
    4
        
    End If

        DataPasqua = 
    DateTime.Date(DateUtils.SetDate(Anno, mese, giorno))
        
    Return DataPasqua

    End Sub
     
  19. LucaMs

    LucaMs Expert Licensed User

  20. udg

    udg Expert Licensed User

    Ora che puoi calcolare con precisione Pasqua dell'anno prossimo, prenoti per tutti un agriturismo, un posticino carino per "Pasquetta"? :D
     
    LucaMs likes this.
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice