Per contare i giorni civili tra date di pubblicazione, confronta le date di calendario invece di dividere le ore trascorse per 24. Su un Mac, Numbers gestisce gli input che contengono solo una data; i timestamp devono prima essere interpretati in un unico fuso orario scelto.

Questa guida usa date di pubblicazione sintetiche e il calendario gregoriano. L’obiettivo è rispondere alla domanda «Quanti giorni di calendario separano queste due pubblicazioni?». Il conteggio predefinito è una differenza con segno: la stessa data dà zero, quella successiva dà uno.

Che tipo di informazioni sulla data hai?

Scegli il tipo di input prima di calcolare. Una data stampata su una pubblicazione e un timestamp che registra l’istante del rilascio richiedono preparazioni diverse.

Input Significato Preparazione
2025-03-09 Una data civile: anno, mese e giorno Confrontala direttamente con un’altra data civile gregoriana
2025-03-09T05:00:00Z Un timestamp che identifica un istante Converti l’istante in una data nel fuso orario di rendicontazione scelto
-05:00 Uno scarto UTC Descrive la differenza dell’ora locale rispetto all’UTC in un dato istante
America/New_York Un fuso orario con nome Fornisce le regole necessarie per interpretare le date locali e i cambi di scarto

Uno scarto e un fuso orario con nome contengono informazioni diverse. Lo scarto associato a un timestamp non descrive quello di un’altra data. Un fuso orario con nome fornisce le regole che determinano questa relazione, compresi i cambi dell’ora legale. Questa distinzione è esplicitata in RFC 9557, «Date and Time on the Internet: Timestamps with Additional Information».

Per un foglio di calcolo con date di pubblicazione, stabilisci questa regola: conserva le date già fornite come date civili; ricava le date dai timestamp usando un unico fuso orario di rendicontazione scelto esplicitamente. Non associare una mezzanotte e uno scarto arbitrari a un valore che contiene solo una data, solo per poter eseguire la sottrazione.

Gli standard per i calendari distinguono anche le date dai valori data-ora. Lo standard iCalendar definisce un valore DATE separato, che contiene le componenti del calendario. La forma serializzata usa cifre senza separatori; in questa guida le date con trattini sono riportate per leggibilità. Vedi RFC 5545, sezione 3.3.4.

Perché dividere i secondi trascorsi per 86.400 non funziona?

La differenza tra date civili misura il progresso nel calendario. La differenza tra tempi trascorsi misura l’intervallo tra due istanti. Quando si verifica un cambio dell’ora legale, le due quantità non corrispondono necessariamente a 24 ore per ogni giorno di calendario. RFC 5545 rileva esplicitamente che una ricorrenza nominale di un giorno può durare più o meno di 24 ore quando si verifica uno spostamento del fuso orario. Vedi la discussione sulle ricorrenze.

Considera due coppie sintetiche di date di pubblicazione in America/New_York. I calcoli seguenti usano la mezzanotte locale per ciascun estremo. Gli scarti seguono le regole del fuso orario di New York e dei relativi cambi, riportate nel database dei fusi orari IANA.

Intervallo sintetico tra le pubblicazioni Scarto iniziale Scarto finale Ore trascorse Differenza tra date civili
9–10 marzo 2025 -05:00 -04:00 23 1
2–3 novembre 2025 -04:00 -05:00 25 1

Per la coppia di marzo, gli istanti UTC corrispondenti sono 2025-03-09T05:00:00Z e 2025-03-10T04:00:00Z: distano 23 ore. Dividendo questo intervallo per 24 si ottiene circa 0.9583. Per la coppia di novembre, lo stesso calcolo dà circa 1.0417. Nessuno dei due valori decimali risponde alla domanda sul calendario.

In questi esempi, l’arrotondamento può nascondere l’errore, ma non costituisce una regola di conteggio affidabile. Due pubblicazioni alle 23:55 e alle 00:05 di date consecutive distano solo dieci minuti, ma la differenza tra le date civili è comunque uno. Estrai prima le date, poi calcola la loro differenza.

Come si contano le date di pubblicazione in Numbers?

Segui questa procedura se hai già le date di pubblicazione desiderate. Apple documenta che DAYS(end-date, start-date) restituisce il numero di giorni tra i suoi argomenti, compreso un risultato negativo quando la data finale precede quella iniziale. Vedi il riferimento di Numbers per DAYS.

Apri un foglio di calcolo Numbers con una tabella vuota. Usa la riga 1 per le etichette descrittive, quindi inserisci individualmente le formule seguenti nella riga 2. Per inserire una formula, seleziona la cella, digita = all’inizio, completa l’espressione e premi Return. Questi sono i passaggi documentati da Apple per inserire formule in Numbers su Mac.

Cella Etichetta di colonna suggerita Formula da inserire Valore previsto
A2 Data della pubblicazione precedente =DATE(2025,3,9) 9 marzo 2025
B2 Data della pubblicazione successiva =DATE(2025,3,10) 10 marzo 2025
C2 Giorni civili di distanza =DAYS(B2,A2) 1

L’uso di DATE costruisce gli input a partire da anno, mese e giorno, senza dipendere dall’interpretazione di una stringa di testo ambigua. Apple consiglia questa funzione per interpretare le date in modo coerente tra le diverse impostazioni di formato, nell’elenco delle funzioni relative a data e ora.

Ripeti la verifica nella riga 3 inserendo =DATE(2025,11,2) in A3, =DATE(2025,11,3) in B3 e =DAYS(B3,A3) in C3. Il risultato è ancora 1. Stai confrontando le date di calendario fornite, quindi non serve correggere la differenza in base alle ore trascorse.

Per un calcolo rapido senza celle di supporto, inserisci =DAYS(DATE(2025,3,10),DATE(2025,3,9)) in una cella vuota. La versione con colonne separate è più facile da controllare e riutilizzare per più coppie di date di pubblicazione.

Vuoi calcolare l’intervallo o un conteggio inclusivo delle date?

La differenza standard non conta l’unità di tempo che corrisponde alla data iniziale. Tra il 9 e il 10 marzo c’è un giorno. Se invece il compito chiede quante date sono comprese dal 9 al 10 marzo inclusi, la risposta è due.

Per un intervallo inclusivo il cui estremo finale coincide con quello iniziale o lo segue, usa =DAYS(B2,A2)+1. Controlla l’ordine prima di applicare la formula. Una differenza negativa segnala che le voci potrebbero essere invertite; calcolare automaticamente il valore assoluto eliminerebbe questa informazione.

La stessa distinzione si applica a un intervallo di una sola data. La differenza tra le date è zero, mentre il conteggio inclusivo comprende una data. Decidi quale risultato serve al tuo foglio di calcolo e assegna di conseguenza un nome alla colonna.

Cosa fare se gli input sono timestamp?

Un timestamp deve essere convertito nel fuso orario di rendicontazione prima di rimuovere l’ora. Per esempio, 2025-03-10T00:30:00Z corrisponde al 9 marzo alle 20:30 in America/New_York, usando lo scarto di -04:00 di quella data. Copiando i primi dieci caratteri del timestamp si otterrebbe la data UTC invece della data di pubblicazione a New York.

La sintassi documentata di Numbers per DAYS accetta due argomenti di tipo data; non prevede un argomento per il fuso orario con nome. Usala dopo aver stabilito le date desiderate. Per calcolare in modo ripetibile la differenza tra timestamp su un Mac, Foundation fornisce le API di calendario necessarie.

Nonostante il nome, Date di Foundation rappresenta un istante indipendente da un calendario o da un fuso orario. Apple indica di eseguire i calcoli di calendario tramite Calendar. Vedi la documentazione ufficiale di Date.

Per i normali cambi dell’ora legale, la sequenza in Foundation è la seguente: selezionare il calendario gregoriano e il fuso orario di rendicontazione, trovare l’inizio della giornata locale di ciascun estremo, quindi richiedere la differenza specificando solo la componente dei giorni. Apple documenta sia startOfDay(for:) sia dateComponents(_:from:to:).

Esegui un esempio Foundation completo in Terminale

Questa procedura facoltativa richiede che sia installata una toolchain Swift. Apri Terminale ed esegui swift --version per controllare, come descritto nella guida introduttiva a Swift. Se necessario, Apple documenta l’installazione degli strumenti a riga di comando tramite xcode-select --install; completa la finestra di dialogo dell’installazione prima di continuare. Vedi Installare gli strumenti a riga di comando.

Incolla l’intero blocco seguente in Terminale. Contiene un programma completo e dati sintetici di input. Analizza timestamp con scarti espliciti e senza frazioni di secondo. Apple documenta .withInternetDateTime per questo formato di timestamp nel riferimento delle opzioni di ISO8601DateFormatter.

swift - <<'SWIFT'
import Foundation

let zoneID = "America/New_York"
guard let zone = TimeZone(identifier: zoneID) else {
    fatalError("Unknown reporting zone: \(zoneID)")
}

var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = zone

let parser = ISO8601DateFormatter()
parser.formatOptions = [.withInternetDateTime]

let samples = [
    ("Spring", "2025-03-09T00:00:00-05:00",
               "2025-03-10T00:00:00-04:00"),
    ("Autumn", "2025-11-02T00:00:00-04:00",
               "2025-11-03T00:00:00-05:00")
]

for (label, startText, endText) in samples {
    guard let start = parser.date(from: startText),
          let end = parser.date(from: endText) else {
        fatalError("Could not parse timestamps for \(label)")
    }

    let startDay = calendar.startOfDay(for: start)
    let endDay = calendar.startOfDay(for: end)
    guard let days = calendar.dateComponents(
        [.day], from: startDay, to: endDay
    ).day else {
        fatalError("Could not calculate civil days for \(label)")
    }

    let hours = end.timeIntervalSince(start) / 3600
    print("\(label): \(days) civil day(s), \(hours) elapsed hours")
}
SWIFT

Di seguito trovi l’output previsto. Gli esempi numerici sono stati verificati in modo indipendente con calcoli sulle date; il programma Swift è stato esaminato, ma non eseguito qui su macOS.

Spring: 1 civil day(s), 23.0 elapsed hours
Autumn: 1 civil day(s), 25.0 elapsed hours

Per adattare il programma, sostituisci le stringhe dei timestamp e scegli con attenzione il fuso orario di rendicontazione. Gli scarti dei timestamp identificano i loro istanti; il fuso orario del calendario determina le date locali a cui appartengono quegli istanti. Il programma si interrompe se il parser segnala un errore, invece di sostituire la data corrente o ignorare un record.

L’esempio accetta il formato indicato con scarto esplicito. Le frazioni di secondo richiedono opzioni del parser diverse. Inoltre, l’esempio non implementa le annotazioni di fuso orario tra parentesi quadre di RFC 9557: specifica separatamente il fuso orario con nome, come mostrato, invece di presumere che questa configurazione del parser supporti tali annotazioni.

Quali controlli fare se il risultato sembra errato?

Esegui questi controlli nell’ordine indicato: ognuno riguarda una diversa possibile causa di disaccordo.

  1. Conferma quale conteggio è richiesto. Per un intervallo in avanti, la differenza tra date e il conteggio inclusivo delle date differiscono di uno.
  2. Conferma gli input. Per le pubblicazioni con date espresse senza ora, usa i valori effettivi di anno, mese e giorno. Non dare per scontato che i timestamp importati rappresentino già le date locali desiderate.
  3. Conferma il fuso orario di rendicontazione. Converti entrambi gli istanti usando lo stesso fuso orario scelto prima di estrarre le date.
  4. Conferma l’operazione. Conta i giorni di calendario dopo aver rimosso l’influenza dell’ora. Dividere l’intervallo tra due istanti per 86,400 risponde a una domanda sulla durata trascorsa.
  5. Conferma la direzione. Conserva il risultato negativo finché non hai verificato se le voci precedenti e successive sono state invertite.

Nel codice relativo al calendario, usa l’API per l’inizio della giornata invece di presumere che ogni giorno locale inizi a una mezzanotte univoca. Apple documenta che startOfDay(for:) seleziona la prima mezzanotte quando ne esistono due, oppure il primo istante esistente se la mezzanotte non esiste. In questo modo si gestisce una condizione al confine che impostare manualmente l’ora a zero può trascurare. Vedi startOfDay(for:).

L’esempio Foundation gestisce i normali cambi dell’ora legale. Per i cambi storici che saltano un’intera data locale, specifica innanzitutto se l’obiettivo è contare le date gregoriane o i giorni locali effettivamente esistiti: sono requisiti diversi. Se l’obiettivo è il primo, conserva gli input che contengono solo date come etichette di calendario.

Per un foglio di calcolo con date di pubblicazione, mantieni semplice il calcolo finale: stabilisci le due date gregoriane desiderate, mantieni il loro ordine e usa DAYS per trovare l’intervallo. Se gli input sono istanti, specifica il fuso orario di rendicontazione prima di calcolare. Così il risultato resta riferito alle date di pubblicazione anche quando l’orologio cambia tra l’una e l’altra.

Fonti