Calcolatore Giorni tra Due Date
Calcola facilmente i giorni tra due date in Excel o direttamente qui. Includi o escludi i giorni festivi e i fine settimana per risultati precisi.
Guida Completa: Formula Excel per Calcolare i Giorni tra Due Date
Calcolare i giorni tra due date è un’operazione fondamentale in Excel, utile per la gestione di progetti, il calcolo di scadenze, l’analisi finanziaria e molto altro. In questa guida completa, esploreremo tutte le formule Excel disponibili per calcolare la differenza tra date, con esempi pratici, casi d’uso avanzati e soluzioni per scenari complessi.
1. La Funzione DATEDIF: Il Metodo Standard
La funzione DATEDIF (Date Difference) è lo strumento principale in Excel per calcolare la differenza tra due date. Nonostante non sia documentata ufficialmente da Microsoft (per ragioni storiche legate alla compatibilità con Lotus 1-2-3), è perfettamente funzionante e affidabile.
Sintassi:
=DATEDIF(data_iniziale; data_finale; unità)
Argomenti:
- data_iniziale: La data di inizio (deve essere minore della data finale)
- data_finale: La data di fine
- unità: Il tipo di differenza da calcolare (vedi tabella sotto)
| Unità | Descrizione | Esempio | Risultato (per 01/01/2023 – 31/12/2023) |
|---|---|---|---|
| “D” | Giorni completi tra le date | =DATEDIF(“01/01/2023″;”31/12/2023″;”D”) | 364 |
| “M” | Mesi completi tra le date | =DATEDIF(“01/01/2023″;”31/12/2023″;”M”) | 11 |
| “Y” | Anni completi tra le date | =DATEDIF(“01/01/2023″;”31/12/2023″;”Y”) | 0 |
| “YM” | Mesi rimanenti dopo gli anni completi | =DATEDIF(“01/01/2023″;”31/12/2023″;”YM”) | 11 |
| “MD” | Giorni rimanenti dopo i mesi completi | =DATEDIF(“01/01/2023″;”15/01/2023″;”MD”) | 14 |
| “YD” | Giorni rimanenti dopo gli anni completi | =DATEDIF(“01/01/2023″;”31/12/2023″;”YD”) | 364 |
Nota importante: Se la data iniziale è successiva alla data finale, DATEDIF restituirà un errore #NUM!. Assicurati sempre che la prima data sia anteriore alla seconda.
2. Alternative a DATEDIF: Funzioni Standard di Excel
Sebbene DATEDIF sia molto utile, Excel offre altre funzioni che possono essere utilizzate per calcolare la differenza tra date:
2.1. Sottrazione Diretta
Il metodo più semplice per ottenere il numero di giorni tra due date è sottraendo direttamente una data dall’altra:
=B1-A1
Dove B1 contiene la data finale e A1 la data iniziale. Il risultato sarà un numero che rappresenta i giorni di differenza.
2.2. Funzione DAYS
Introduotta in Excel 2013, la funzione DAYS fornisce un’alternativa semplice a DATEDIF per calcolare i giorni:
=DAYS(data_finale; data_iniziale)
Esempio: =DAYS(“31/12/2023”; “01/01/2023”) restituirà 364.
2.3. Funzione DAYS360
Questa funzione calcola la differenza tra due date assumendo che ogni mese abbia 30 giorni (utilizzato principalmente in contabilità):
=DAYS360(data_iniziale; data_finale; [metodo])
Il parametro opzionale [metodo] può essere:
- FALSE o omesso: Metodo europeo (data iniziale = 31 → diventa 30)
- TRUE: Metodo americano (se la data iniziale è l’ultimo giorno del mese → diventa 30; se la data finale è l’ultimo giorno del mese e la data iniziale è il 30 → la data finale diventa il 1° del mese successivo)
3. Calcolare i Giorni Lavorativi (Escludere Fine Settimana e Festivi)
Per calcolare i giorni lavorativi (escludendo sabato e domenica), Excel offre due funzioni principali:
3.1. Funzione NETWORKDAYS
=NETWORKDAYS(data_iniziale; data_finale; [festivi])
Il parametro [festivi] è opzionale e rappresenta un intervallo di celle contenenti le date dei giorni festivi da escludere.
Esempio pratico:
Supponiamo di voler calcolare i giorni lavorativi tra il 1 gennaio 2023 e il 31 dicembre 2023, escludendo i seguenti giorni festivi (in un intervallo chiamato “Festivi”):
=NETWORKDAYS(“01/01/2023”; “31/12/2023”; Festivi)
3.2. Funzione NETWORKDAYS.INTL
Questa funzione è più flessibile e permette di specificare quali giorni della settimana considerare come fine settimana:
=NETWORKDAYS.INTL(data_iniziale; data_finale; [fine_settimana]; [festivi])
Il parametro [fine_settimana] può essere:
- 1: Sabato e Domenica (predefinito)
- 2: Domenica e Lunedì
- 3: Lunedì e Martedì
- …
- 11: Solo Domenica
- 12: Solo Sabato
- 13: Solo Venerdì
- 14: Solo Giovedì
- 15: Solo Mercoledì
- 16: Solo Martedì
- 17: Solo Lunedì
In alternativa, è possibile utilizzare una stringa di 7 caratteri dove “1” rappresenta un giorno non lavorativo e “0” un giorno lavorativo. Ad esempio:
- “0000011”: Sabato e Domenica non lavorativi (equivalente a 1)
- “1000001”: Domenica e Lunedì non lavorativi (equivalente a 2)
- “1111100”: Solo Sabato e Domenica lavorativi (tutti gli altri giorni non lavorativi)
Esempio:
Per calcolare i giorni lavorativi tra due date considerando solo la Domenica come giorno non lavorativo:
=NETWORKDAYS.INTL(“01/01/2023”; “31/12/2023”; 11; Festivi)
4. Calcolare Anni, Mesi e Giorni Separatamente
Spesso è utile suddividere la differenza tra due date in anni, mesi e giorni. Ecco come fare:
4.1. Utilizzando DATEDIF
Combinando diverse istanze di DATEDIF, possiamo ottenere anni, mesi e giorni separati:
- Anni: =DATEDIF(A1; B1; “Y”)
- Mesi: =DATEDIF(A1; B1; “YM”)
- Giorni: =DATEDIF(A1; B1; “MD”)
4.2. Formula Unificata
Per ottenere un risultato nel formato “X anni, Y mesi, Z giorni”, possiamo usare:
=DATEDIF(A1; B1; “Y”) & ” anni, ” & DATEDIF(A1; B1; “YM”) & ” mesi, ” & DATEDIF(A1; B1; “MD”) & ” giorni”
4.3. Funzioni YEAR, MONTH e DAY
Un approccio alternativo utilizza le funzioni YEAR, MONTH e DAY per calcolare la differenza:
=YEAR(B1)-YEAR(A1)-IF(OR(MONTH(B1) IF(MONTH(B1)>=MONTH(A1); MONTH(B1)-MONTH(A1); 12-MONTH(A1)+MONTH(B1))-IF(DAY(B1) IF(DAY(B1)>=DAY(A1); DAY(B1)-DAY(A1); DAY(B1)+DAY(EOMONTH(B1; -1))-DAY(A1)) & ” giorni” Excel gestisce automaticamente gli anni bisestili nelle funzioni di data. Ad esempio, la differenza tra il 28 febbraio 2023 e il 1 marzo 2023 è 1 giorno, mentre tra il 28 febbraio 2024 (anno bisestile) e il 1 marzo 2024 è 2 giorni (perché febbraio 2024 ha 29 giorni). Per verificare se un anno è bisestile, puoi usare questa formula: =IF(OR(MOD(YEAR(A1); 400)=0; AND(MOD(YEAR(A1); 4)=0; MOD(YEAR(A1); 100)<>0)); “Bisestile”; “Non bisestile”) Per aggiungere o sottrarre giorni a una data, puoi semplicemente sommare o sottrarre il numero di giorni: Per aggiungere mesi o anni, usa le funzioni EDATE o DATE: Excel memorizza le date come numeri seriali (1 = 1 gennaio 1900), ma le visualizza in formato data grazie alla formattazione. Per cambiare il formato di una data: Per formattare una data come testo con un formato personalizzato, usa la funzione TEXT: =TEXT(A1; “gggg, gg mmmm aaaa”) → “lunedì, 13 marzo 2023” Quando si lavora con le date in Excel, è facile incorrere in errori. Ecco i più comuni e come risolverli: Problema: La cella mostra ###### invece della data. Soluzione: La colonna è troppo stretta per visualizzare la data. Allarga la colonna o riduci la dimensione del carattere. Problema: Le date appaiono come numeri seriali (es. 44927). Soluzione: Applica il formato “Data” alla cella (Ctrl+1 → Data). Problema: La formula restituisce #VALORE! quando si sottraggono date. Soluzione: Una o entrambe le celle non sono riconosciute come date. Verifica che le celle siano formattate come data e che contengano valori validi. Problema: DATEDIF restituisce #NUM!. Soluzione: La data iniziale è successiva alla data finale. Inverti l’ordine delle date. Problema: Le date importate da CSV o altri file sono allineate a sinistra (segno che sono testo). Soluzione: Usa la funzione DATA.VALORE per convertire il testo in data: =DATA.VALORE(A1) Oppure usa “Trova e selezione” → “Seleziona gruppo di celle” → seleziona le celle con date come testo → clicca sull’icona di avviso che appare accanto alle celle → “Converti in numero”. Per calcolare l’età di una persona in anni, mesi e giorni: =DATEDIF(A1; OGGI(); “Y”) & ” anni, ” & DATEDIF(A1; OGGI(); “YM”) & ” mesi, ” & DATEDIF(A1; OGGI(); “MD”) & ” giorni” Dove A1 contiene la data di nascita. Se i giorni festivi cambiano ogni anno (come la Pasqua), puoi creare una tabella con le formule per calcolarli automaticamente. Ad esempio, per calcolare la Pasqua (che cade la prima domenica dopo la prima luna piena successiva all’equinozio di primavera): =DATA(ANNO; 3; 1)+INT((19*(ANNO MOD 19)+24)/30)+INT((2*(ANNO MOD 4)+4*(ANNO MOD 7)+6*((19*(ANNO MOD 19)+24) MOD 30)+5)/7)*7-((ANNO+ANNO\4+6) MOD 7) Dove ANNO è l’anno di interesse (es. 2023). Se hai una data di inizio (A1), una data di fine (B1) e la data odierna (OGGI()), puoi calcolare la percentuale di completamento: =IF(OGGI()>B1; 100%; IF(OGGI() Formattare la cella come percentuale. Per creare un calendario mensile che si aggiorna automaticamente: La scelta del metodo dipende dalle tue esigenze specifiche. Ecco un confronto tra i principali approcci: Per approfondire l’argomento, consultare le seguenti risorse autorevoli: Esempio 1: Calcolo dei Giorni di Consegna Supponiamo che un ordine debba essere consegnato entro 15 giorni lavorativi (escludendo fine settimana e festivi). La data di ordine è il 1 marzo 2023. Qual è la data di consegna? =LAVORATIVO.INTL(“01/03/2023”; 15; 1; Festivi) Dove “Festivi” è l’intervallo contenente le date dei giorni festivi. Esempio 2: Calcolo dell’Anzianità di Servizio Un dipendente è stato assunto il 15 giugno 2018. Qual è la sua anzianità al 31 dicembre 2023? =DATEDIF(“15/06/2018”; “31/12/2023”; “Y”) & ” anni e ” & DATEDIF(“15/06/2018”; “31/12/2023”; “YM”) & ” mesi” Esempio 3: Scadenza di un Contratto Un contratto di 18 mesi è iniziato il 1 settembre 2022. Qual è la data di scadenza? =EDATE(“01/09/2022”; 18) Esempio 4: Tempo Rimasto per un Progetto Un progetto deve essere completato entro il 30 novembre 2023. Quanti giorni lavorativi rimangono (data odierna: 15 ottobre 2023)? =NETWORKDAYS(OGGI(); “30/11/2023”; Festivi) Anche gli utenti esperti possono commettere errori quando lavorano con le date in Excel. Ecco alcuni degli errori più comuni e come evitarli: Problema: Trattare le date come testo può portare a errori nei calcoli. Soluzione: Usa sempre il formato data e funzioni come DATA.VALORE per convertire il testo in date. Problema: Calcoli manuali che non tengono conto del 29 febbraio possono essere imprecisi. Soluzione: Usa le funzioni integrate di Excel che gestiscono automaticamente gli anni bisestili. Problema: Date in formati diversi (es. gg/mm/aaaa vs mm/gg/aaaa) possono causare confusioni. Soluzione: Standardizza il formato delle date in tutto il foglio di lavoro. Problema: In progetti internazionali, ignorare i fusi orari può portare a discrepanze. Soluzione: Converti tutte le date in UTC o in un fuso orario di riferimento. Problema: Le formule che usano OGGI() o ORA() non si aggiornano automaticamente se il calcolo automatico è disabilitato. Soluzione: Assicurati che il calcolo automatico sia attivo (Formule → Opzioni di calcolo → Automatico). Problema: Calcolare la differenza in mesi tra due date può essere complicato a causa della lunghezza variabile dei mesi. Soluzione: Usa DATEDIF con l’unità “M” o combinazioni di “Y” e “YM”. Le tabelle di Excel (Inserisci → Tabella) offrono diversi vantaggi per lavorare con le date: Esempio: Creare una tabella per tracciare le scadenze dei progetti: Per analisi più avanzate con le date, puoi utilizzare Power Query e Power Pivot: Power Query (Dati → Ottieni dati) permette di: Esempio: Calcolare l’età in anni da una colonna “DataNascita”: Power Pivot (un componente aggiuntivo in Excel) offre: Esempio: Creare una misura per calcolare il numero di giorni tra due date in un modello dati: =DATEDIFF([DataInizio]; [DataFine]; DAY) Se usi Power Pivot, le funzioni DAX per le date sono molto potenti: Excel offre diversi tipi di grafici utili per visualizzare dati temporali: Ideale per mostrare tendenze nel tempo (es. vendite mensili). Utile per confrontare valori in diversi periodi (es. vendite per trimestre). Per analizzare la relazione tra due variabili temporali. Per visualizzare come un valore iniziale viene influenzato da una serie di aggiunte e sottrazioni nel tempo. Per la gestione dei progetti, mostra le tempistiche delle attività. Come creare un grafico a Gantt in Excel: Per automazioni complesse con le date, puoi usare le macro VBA (Visual Basic for Applications). Ecco alcuni esempi: In questa guida completa abbiamo esplorato tutte le sfaccettature del calcolo dei giorni tra due date in Excel, dalla semplice sottrazione alla gestione avanzata di anni bisestili, festivi e giorni lavorativi. Ecco un riepilogo dei punti chiave: Che tu stia gestendo progetti, calcolando scadenze o analizzando dati temporali, padroneggiare queste tecniche ti permetterà di lavorare in modo più efficiente ed accurato con le date in Excel. Ricorda che la pratica è fondamentale: sperimenta con i diversi metodi e adattali alle tue esigenze specifiche. Se hai bisogno di calcoli ancora più avanzati, considera l'uso di strumenti come Power BI o linguaggi di programmazione come Python (con librerie come pandas), che offrono funzionalità ancora più potenti per l'analisi delle date.5. Gestione degli Anni Bisestili
6. Calcolare la Data Futura o Passata Aggiungendo Giorni
7. Formattazione delle Date in Excel
Codice Formato
Descrizione
Esempio (per 15/03/2023)
gg
Giorno come numero (01-31)
15
ggg
Giorno abbreviato (lun, mar, etc.)
mer
gggg
Giorno completo (lunedì, martedì, etc.)
mercoledì
mm
Mese come numero (01-12)
03
mmm
Mese abbreviato (gen, feb, etc.)
mar
mmmm
Mese completo (gennaio, febbraio, etc.)
marzo
aa
Anno a 2 cifre (00-99)
23
aaaa
Anno a 4 cifre (1900-9999)
2023
[h]:mm
Ore e minuti (per differenze >24h)
265:45
8. Errori Comuni e Soluzioni
8.1. ###### nelle Celle
8.2. Date Visualizzate come Numeri
8.3. Errore #VALORE!
8.4. Errore #NUM!
8.5. Date Importate come Testo
9. Casi d’Uso Avanzati
9.1. Calcolare l’Età Esatta
9.2. Calcolare i Giorni Lavorativi tra Due Date con Festivi Variabili
9.3. Calcolare la Percentuale di Completamento di un Progetto
9.4. Creare un Calendario Dinamico
10. Confronto tra Metodi: Quale Scegliere?
Metodo
Vantaggi
Svantaggi
Casi d’Uso Ideali
DATEDIF
Sottrazione diretta
DAYS
NETWORKDAYS
Formule personalizzate
11. Risorse Esterne e Approfondimenti
12. Best Practice per Lavorare con le Date in Excel
13. Esempi Pratici con Dati Realistici
14. Errori Comuni nei Calcoli con le Date e Come Evitarli
14.1. Dimenticare che Excel Memorizza le Date come Numeri
14.2. Non Considerare gli Anni Bisestili
14.3. Usare Formati Data Diversi
14.4. Ignorare i Fusi Orari
14.5. Non Aggiornare le Date Relative
14.6. Errori nei Calcoli di Mesi
15. Automatizzare i Calcoli con le Tabelle di Excel
16. Integrazione con Power Query e Power Pivot
16.1. Power Query
Number.From(DateTime.LocalNow()) - Number.From([DataNascita]) per ottenere i giorni, poi dividi per 365.16.2. Power Pivot
17. Funzioni DAX per le Date
Funzione DAX
Descrizione
Esempio
DATEDIFF
Calcola la differenza tra due date in giorni, mesi o anni
=DATEDIFF([DataInizio]; [DataFine]; DAY)
DATE
Crea una data da anno, mese e giorno
=DATE(2023; 3; 15)
TODAY
Restituisce la data odierna
=TODAY()
EOMONTH
Restituisce l’ultimo giorno del mese
=EOMONTH([Data]; 0)
SAMEPERIODLASTYEAR
Restituisce un set di date spostato indietro di un anno
=SAMEPERIODLASTYEAR([Data])
DATESYTD
Restituisce tutte le date dall’inizio dell’anno fino alla data specificata
=DATESYTD([Data])
18. Visualizzazione dei Dati con Grafici Temporali
18.1. Grafico a Linee
18.2. Grafico a Colonne
18.3. Grafico a Dispersione
18.4. Grafico a Cascata
18.5. Grafico a Gantt
19. Macro VBA per Automazioni Avanzate
19.1. Calcolare l’Età in Anni, Mesi e Giorni
Function Età(DataNascita As Date) As String
Dim Anni As Integer, Mesi As Integer, Giorni As Integer
Anni = DateDiff("yyyy", DataNascita, Date)
Mesi = DateDiff("m", DateSerial(Year(DataNascita), Month(DataNascita) + Anni * 12, Day(DataNascita)), Date)
Giorni = Date - DateSerial(Year(Date), Month(Date) - Mesi, Day(DataNascita))
Età = Anni & " anni, " & Mesi & " mesi, " & Giorni & " giorni"
End Function
19.2. Contare i Giorni Lavorativi tra Due Date
Function GiorniLavorativi(DataInizio As Date, DataFine As Date) As Integer
Dim Giorni As Integer, i As Date
Giorni = 0
For i = DataInizio To DataFine
If Weekday(i, vbMonday) < 6 Then ' Esclude sabato (6) e domenica (7)
Giorni = Giorni + 1
End If
Next i
GiorniLavorativi = Giorni
End Function
19.3. Aggiungere Giorni Lavorativi a una Data
Function AggiungiGiorniLavorativi(DataInizio As Date, GiorniDaAggiungere As Integer) As Date
Dim i As Integer, DataTemp As Date
DataTemp = DataInizio
For i = 1 To GiorniDaAggiungere
DataTemp = DataTemp + 1
Do While Weekday(DataTemp, vbMonday) > 5 ' Salta fine settimana
DataTemp = DataTemp + 1
Loop
Next i
AggiungiGiorniLavorativi = DataTemp
End Function
20. Conclusione e Riepilogo