Cómo tratar con fechas en Excel usando PHP

En el desarrollo de aplicaciones para empresas es bastante común tener que trabajar con Excel (Ya sea importando planillas a bases de datos o bien lo inverso).

En general, la libería PHPSpreadSheet funciona muy bien para estos casos (Algo más de información aquí), sin embargo, el tratamiento de las fechas no es tan sencillo como esperamos.

Cómo Excel maneja las fechas

El problema radica en que el valor almacenado en la celda no es en realidad una fecha… si no la cantidad de días transcurridos desde el primero de Enero de 1900 (Si tenés curiosidad abrí el Excel y probá la fórmula «=DATEVALUE(‘1900-01-01’)»).

Esto provoca que, al hacer algo como:

$value = $worksheet->getCell('A1')->getValue();

Obtengamos un número entero (Generalmente grande) en lugar de una fecha

Cómo leer datos de tipo fecha con PhpSpreadsheet

Para resolver este pequeño inconveniente PhpSpreadsheet dispone de un método especial:

$date = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($value);

Este método retorna un objeto de tipo DateTime.

A partir de este objeto podemos usar todas las operaciones que queramos.

Cómo escribir datos de tipo fecha con PhpSpreadsheet

Y ¿qué pasa si tenemos que generar valores fecha para exportar a Excel? (Básicamente lo inverso de lo anterior).

Para eso también tenemos un método especial:

\PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel( $date )

Este método tomará un objeto DateTime de php y lo convertirá a su correspondiente valor numérico para ser guardado sin problemas en una planilla de cálculo Excel.

mchojrin

Docente y consultor PHP at Leeway Academy
Ayudo a desarrolladores PHP a acelerar su llegada a Sr.

¿Te quedó alguna duda? Publica aca tu pregunta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: