Aggiungere trimestri a una data con fine mese corretto
Questo calcolatore sposta una data ISO esplicita di un numero intero, positivo o negativo, di trimestri.
Esegui gratis nel browser
Ogni trimestre equivale esattamente a tre mesi di calendario: un trimestre dopo il 30 novembre cade a febbraio dell’anno successivo, mentre quattro trimestri avanzano di un anno civile. Se il giorno originale non esiste nel mese di destinazione, viene riportato all’ultimo giorno valido. Il calcolo usa aritmetica gregoriana deterministica in termini UTC, senza l’oggetto Date di JavaScript, orologio, conversioni di fuso, rete o casualità. Lei può eseguirlo gratuitamente nel browser oppure usare l’API al costo di $0.002 per richiesta riuscita quando serve un risultato strutturato e ripetibile in un flusso automatizzato.
Che cosa significa aggiungere trimestri di calendario
Un trimestre di calendario comprende tre mesi consecutivi e non è una durata fissa in giorni, ore o secondi. Aggiungerne uno sposta quindi il mese di tre posizioni e mantiene il numero del giorno quando esiste nella destinazione. Quattro trimestri avanzano di dodici mesi e normalmente producono lo stesso mese e giorno dell’anno seguente. La data deve rispettare rigorosamente YYYY-MM-DD e indicare un vero giorno gregoriano; quarters deve essere intero. I valori positivi avanzano, quelli negativi retrocedono e zero conserva la data. Questa definizione evita l’ambiguità di considerare un trimestre come novanta giorni, perché gli intervalli reali variano con la lunghezza dei mesi e gli anni bisestili. La risposta riporta la data iniziale normalizzata, il numero di trimestri, la data ISO risultante e i suoi componenti, i mesi equivalenti, l’eventuale correzione e la durata del mese finale. Non viene accettata né dedotta alcuna ora: si risolve una questione di calendario civile, non di tempo trascorso. Il risultato rimane pertanto stabile indipendentemente dal luogo di esecuzione e dal fuso orario del chiamante.
Come funzionano validazione e correzione di fine mese
Il calcolatore richiede anzitutto quattro cifre per l’anno, due per il mese e due per il giorno, separate da trattini. Verifica poi il calendario gregoriano: il mese deve essere compreso tra 01 e 12, il giorno deve esistere e il 29 febbraio è ammesso soltanto negli anni divisibili per quattro, esclusi i secoli non divisibili per quattrocento. L’algoritmo converte anno e mese in un indice intero, moltiplica per tre il numero di trimestri con segno, somma lo spostamento e ricava anno e mese di destinazione. Confronta quindi il giorno originale con la lunghezza del mese finale. Se esiste lo conserva; altrimenti usa l’ultimo giorno e clamped diventa true. Per esempio, il 30 novembre più un trimestre arriva al 28 febbraio in un anno comune o al 29 in uno bisestile. Sono rifiutati i risultati fuori dall’intervallo 0001–9999. Ogni passaggio usa interi finiti, senza Date, orologio, nomi locali o regole di fuso dipendenti dall’implementazione.
Impieghi pratici e integrazione riproducibile
Gli spostamenti trimestrali ricorrono in rendicontazione finanziaria, rinnovi, verifiche di conformità, previsioni, didattica e collaudo del software. Un reparto finanziario può proiettare la revisione successiva da una chiusura trimestrale senza sostituire in modo implicito il trimestre con novanta giorni. I team di prodotto possono avanzare una scadenza di rinnovo e verificare se un mese breve ha cambiato il giorno. Gli analisti possono creare confini di coorte e gli sviluppatori dati di prova identici in ogni ambiente. I numeri negativi consentono di ricostruire date comparabili di uno o quattro trimestri precedenti. Poiché l’input contiene una data completa e il motore non legge mai l’ora corrente, la stessa richiesta produce sempre la stessa risposta. È quindi adatto ad asserzioni CI, cache, documentazione riproducibile e pipeline sottoposte ad audit. L’esecuzione nel browser è gratuita; tramite API ogni elemento riuscito costa $0.002, mentre gli input non validi vengono respinti. Per giorni trascorsi esatti o festività occorrono strumenti dedicati. Questa capacità aggiunge soltanto trimestri interi di tre mesi, conservando il giorno quando possibile e correggendolo in modo prevedibile quando necessario.
Casi d'uso
Pianificazione dei rinnovi trimestrali
Faccia avanzare un contratto o un anniversario di abbonamento di uno o più periodi di tre mesi con regole esplicite per la fine del mese.
Confronti per la rendicontazione
Torni indietro di uno o quattro trimestri per ottenere date riproducibili di confronto con il trimestre o l’anno precedente.
Dati di prova per il calendario
Generi risultati ISO deterministici per anni bisestili, passaggi d’anno e mesi brevi senza usare Date.
Domande frequenti
Quanto dura un trimestre in questo calcolatore?
Un trimestre equivale esattamente a tre mesi di calendario, non a novanta giorni né a un numero fisso di secondi.
Posso sottrarre trimestri?
Sì. Inserisca un intero negativo in quarters per tornare indietro. Il risultato deve restare tra gli anni 0001 e 9999.
Che cosa accade se nel mese finale manca il giorno originale?
Il giorno viene riportato all’ultimo valido del mese di destinazione e il campo clamped della risposta diventa true.
Il calcolo usa un fuso orario o la data corrente?
No. L’input è una data esplicita e il calcolo usa interi deterministici senza Date, orologio o conversioni di fuso.
Quanto costa una richiesta API?
L’esecuzione nel browser è gratuita. Una richiesta API riuscita costa $0.002; gli input non validi o fuori intervallo vengono respinti.
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/add-quarters \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"2024-11-30","quarters":1}'const res = await fetch("https://api.kit.forhosting.com/date/add-quarters", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"date": "2024-11-30",
"quarters": 1
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/add-quarters",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"date": "2024-11-30",
"quarters": 1
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/add-quarters", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"date":"2024-11-30","quarters":1}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"date":"2024-11-30","quarters":1}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/add-quarters", 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
{
"date": "2024-11-30",
"quarters": 1
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.add_quarters",
"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.
Limiti
year_min | 1 |
year_max | 9999 |
quarters_min | -39996 |
quarters_max | 39996 |
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. |