Italian Giorni dell'anno senza feste

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!!!
 

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:(
 

Star-Dust

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:(
Io ho un app più semplice 0€/365giorni= 0€ :)
 

LucaMs

Expert
Licensed User
Credo che manchi il segno di divisione ("/")
Confermo.

Infatti il codice della funzione Pasqua, ad esempio, incollato così com'era dava solo errori (in Excel), mentre così funziona:
B4X:
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) + 15) Mod 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
 

LucaMs

Expert
Licensed User
Uhm... devo trovare il bug, perché la conversione VBA -> B4A sembra riuscita ma il risultato è imperfetto:
B4X:
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) + 15) Mod 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°
 

LucaMs

Expert
Licensed User
Quindi, grazie a @udg, la funzione per la Pasqua è ok (usa DateUtils):
B4X:
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 <= 2099) Then
        m = 24
        n = 5
    Else If (Anno <= 2199) Then
        m = 24
        n = 6
    Else If (Anno <= 2299) Then
        m = 25
        n = 0
    Else If (Anno <= 2399) Then
        m = 26
        n = 1
    Else If (Anno <= 2499) Then
        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) < 10) Then
        giorno = d + e + 22
        mese = 3
    Else
        giorno = d + e - 9
        mese = 4
    End If

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

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

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

End Sub
 

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
 
Top