Differenza tra date in anni, mesi e giorni
Questo calcolatore scompone l’intervallo tra due date ISO esplicite in anni interi, mesi interi e giorni rimanenti.
Esegui gratis nel browser
Indica anche la direzione e il totale dei giorni con segno. Poiché Lei fornisce entrambe le date, il risultato non dipende mai dall’ora corrente. La convalida rigorosa AAAA-MM-GG, il calendario gregoriano prolettico e l’aritmetica indipendente dal fuso rendono la stessa richiesta riproducibile nel browser, nell’API o in un test automatico.
Come viene calcolata la scomposizione in anni, mesi e giorni
Il calcolatore considera l’intervallo una durata di calendario, non una conversione decimale dei giorni trascorsi. Partendo dalla data precedente, trova il maggior numero di mesi completi sommabili senza superare quella successiva. Divide quindi il totale in anni e mesi e conta i giorni esatti dall’anniversario intermedio. Trenta giorni, dunque, non formano sempre un mese: deve essere stato raggiunto l’anniversario mensile seguente. Questo metodo mantiene il significato comune di anni e mesi nonostante le diverse lunghezze. total_days fornisce separatamente la differenza ordinale con segno. Usi tale campo per un valore unico e la scomposizione per una durata leggibile. Con date invertite i componenti restano non negativi, mentre direction e total_days rispettano l’ordine inserito.
Fine mese, anni bisestili, date invertite e UTC
Non tutti i giorni esistono in ogni mese, quindi servono regole esplicite. Se un passo mensile arriva in un mese più corto, il giorno viene limitato all’ultimo valido: il 31 gennaio porta al 28 o 29 febbraio. L’algoritmo controlla poi che non vi sia stato alcun superamento. Gli anni bisestili seguono la regola gregoriana: divisibili per 4, eccetto i secoli non divisibili per 400. Se la seconda data precede la prima, la scomposizione conserva la grandezza, direction indica il ritorno e total_days diventa negativo. Date uguali producono zeri. Il calcolo usa solo interi, senza Date di JavaScript, fuso locale, ora legale, rete, orologio o analisi dipendente dalla lingua.
Come inserire le date e interpretare correttamente l’output
Inserisca from e to come stringhe AAAA-MM-GG con gli zeri iniziali. Sono ammessi gli anni da 0001 a 9999. Date impossibili, campi mancanti, timestamp, formati regionali e frasi naturali vengono rifiutati anziché interpretati. years, months e days descrivono insieme una durata sequenziale dalla data cronologicamente precedente; non converta un mese in un numero fisso di giorni. total_days è utile per ordinamento, scadenze e archiviazione scalare, mentre direction indica avanzamento, ritorno o uguaglianza. Gli impieghi includono anzianità, durata dei progetti, confronti storici e regole contrattuali riproducibili. Una richiesta API costa $0.002. Per calcolare un’età a un giorno preciso, fornisca e conservi quel riferimento: lo strumento non usa mai automaticamente la data odierna.
Casi d'uso
Descrivere la durata di un progetto
Trasformi due traguardi registrati in una durata leggibile conservando anche il conteggio esatto e firmato dei giorni.
Calcolare l’anzianità a una data fissa
Misuri iscrizione, impiego o vita di un account rispetto a un riferimento salvato, non al giorno corrente.
Creare test di data riproducibili
Verifichi fine mese e anni bisestili con risultati indipendenti dal fuso e dal momento di esecuzione.
Domande frequenti
Il calcolatore usa la data odierna?
No. Entrambe le date ISO sono obbligatorie e il calcolo non consulta mai l’orologio corrente.
Sono ammesse date in ordine inverso?
Sì. La scomposizione resta non negativa, direction indica il ritorno e total_days diventa negativo.
Come vengono gestite le date di fine mese?
Il passo mensile viene limitato all’ultimo giorno valido del mese più corto e poi controllato per evitare superamenti.
Quale formato di data è accettato?
Usi stringhe rigorose AAAA-MM-GG con date gregoriane valide e anni compresi tra 0001 e 9999.
Fuso orario e ora legale cambiano il risultato?
No. Si usa aritmetica intera delle date, senza Date di JavaScript, fuso locale o regole dell’ora legale.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/date/diff-breakdown-ymd \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"from":"2019-01-31","to":"2024-03-02"}'const res = await fetch("https://api.kit.forhosting.com/date/diff-breakdown-ymd", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"from": "2019-01-31",
"to": "2024-03-02"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/diff-breakdown-ymd",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"from": "2019-01-31",
"to": "2024-03-02"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/diff-breakdown-ymd", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"from":"2019-01-31","to":"2024-03-02"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"from":"2019-01-31","to":"2024-03-02"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/diff-breakdown-ymd", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"from": "2019-01-31",
"to": "2024-03-02"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.diff_breakdown_ymd",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |