Convertire le date dal formato Excel al formato standard con JavaScript

Quando si lavora con file Excel, è comune imbattersi in date rappresentate come numeri interi. Excel utilizza un sistema basato su numeri seriali per rappresentare le date: il numero 1 corrisponde al 1 gennaio 1900. Per convertire queste date in un formato leggibile in JavaScript, è necessario effettuare una trasformazione basata su questa logica.

Il Problema

Ad esempio, il numero 45000 rappresenta una data nel 2023. Tuttavia, in JavaScript, non possiamo semplicemente trattare questo numero come una data. Dobbiamo convertirlo partendo da una base temporale (epoch) e aggiungere il numero di giorni corrispondente.

La Soluzione in JavaScript

Il codice seguente mostra come convertire una data Excel (numero seriale) in una data JavaScript leggibile:


function excelDateToJSDate(serial) {
  // Excel considera il 1 gennaio 1900 come giorno 1
  // JavaScript usa il 1 gennaio 1970 come epoch
  // Calcoliamo la differenza in millisecondi e creiamo una nuova data
  const excelEpoch = new Date(1899, 11, 30); // 30 dicembre 1899, non 1 gennaio 1900, per compensare il bug di Excel sul 1900 bisestile
  const msPerDay = 24 * 60 * 60 * 1000;
  return new Date(excelEpoch.getTime() + serial * msPerDay);
}

Esempio di utilizzo:


const excelSerial = 45000;
const jsDate = excelDateToJSDate(excelSerial);
console.log(jsDate.toISOString()); // Output: ad esempio, "2023-03-06T00:00:00.000Z"

Considerazioni Importanti

  • Excel su Windows considera erroneamente il 1900 come anno bisestile, quindi il numero seriale 60 rappresenta il 29 febbraio 1900, una data inesistente. Questo è compensato nel calcolo usando il 30 dicembre 1899 come base.
  • Excel su macOS può invece usare come base il 1 gennaio 1904 (sistema "1904 date system"), quindi è importante conoscere il contesto del file Excel per fare la conversione corretta.

Conclusione

Convertire le date da formato Excel a formato standard in JavaScript richiede una semplice trasformazione basata su una data di riferimento. Con pochi passaggi è possibile ottenere date leggibili e correttamente gestibili nel proprio codice JavaScript.

Torna su