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.
Cuidado: que lo guarde bien no quiere decir que se vea bien al abrir el Excel.
Si lo dejas así verás algo como:

Que si bien técnicamente es correcto, muy probablemente no sea lo que esperarías.
No te preocupes, la solución es bien simple. Todo lo que tienes que hacer es establecer un formato para la celda que contiene la fecha.
Sería algo así como:
$worksheet->getStyle('A1')
->getNumberFormat()
->setFormatCode(
\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_YYYYMMDDSLASH
);
Con esto tendrás una salida bien formateada y no tendrás problemas de incompatibilidad con configuraciones regionales.

¿Te quedó alguna duda? Publica aca tu pregunta