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

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.