Esta es la solución más correcta que te podemos compartir, pero obsérvala pausadamente y analiza si se puede adaptar a tu proyecto.
Solución:
El valor es la cantidad de días transcurridos desde 1900. Puede usar las funciones integradas de PhpSpreadsheet para convertirlo en una marca de tiempo de Unix:
$value = $worksheet->getCell('A1')->getValue();
$date = PhpOfficePhpSpreadsheetSharedDate::excelToTimestamp($value);
O a un PHP DateTime
objeto:
$value = $worksheet->getCell('A1')->getValue();
$date = PhpOfficePhpSpreadsheetSharedDate::excelToDateTimeObject($value);
Cuando estamos iterando con $row->getCellIterator()
o podemos tener otros tipos de valor, podría ser útil usar getFormattedValue en su lugar
durante el uso getValue()
- Nombre completo: Jane Doe => “Jane Doe”
- Fecha de nacimiento: 18/11/2000 => 36848.0
durante el uso getFormattedValue()
- Nombre completo: Jane Doe => “Jane Doe”
- Fecha de nacimiento: 18/11/2000 => “18/11/2000”
Como no puedo agregar comentarios, solo agregue una respuesta para futuros usuarios. puede convertir una marca de tiempo de Excel a una marca de tiempo de Unix usando el siguiente código (de la respuesta aceptada)
$value = $worksheet->getCell('A1')->getValue();
$date = PhpOfficePhpSpreadsheetSharedDate::excelToTimestamp($value);
Y puede determinar si la celda dada es Fecha Hora usando PhpOfficePhpSpreadsheetSharedDate::isDateTime($cell)
función.
Nos puedes patrocinar nuestro análisis ejecutando un comentario y puntuándolo te estamos agradecidos.