read - cómo obtener la fecha de Excel usando la biblioteca PHPExcel
phpexcel read date (4)
En la nueva versión de la biblioteca, PhpOffice , la función que maneja esto es excelToDateTimeObject por lo que el nuevo formato de código debería ser:
$cell = $excel->getActiveSheet()->getCell(''B'' . $i);
$InvDate= $cell->getValue();
if (PhpOffice/PhpSpreadsheet/Shared/Date::isDateTime($cell)) {
$InvDate = PhpOffice/PhpSpreadsheet/Shared/Date::excelToDateTimeObject($InvDate);
}
Estoy tratando de obtener la fecha de Excel usando PHPExcel. Pero no estoy obteniendo una fecha, estoy obteniendo un valor de cadena que no es segundos de 1970.
Código que he intentado es
$InvDate=trim($excel->getActiveSheet()->getCell(''B'' . $i)->getValue());
Intenta usar
$cell = $excel->getActiveSheet()->getCell(''B'' . $i);
$InvDate= $cell->getValue();
if(PHPExcel_Shared_Date::isDateTime($cell)) {
$InvDate = date($format, PHPExcel_Shared_Date::ExcelToPHP($InvDate));
}
PD
@DiegoDD: Debería mencionar que $ format es el formato deseado para la fecha. p.ej:
$InvDate = date($format = "Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($InvDate));
Para una fecha, getValue () debe devolver un valor flotante, que es el valor de la marca de tiempo serializada de Excel para esa fecha / hora ... Sospecho que es su recorte () el que lo convierte en una cadena. El valor real es el número de días desde el 1/1/1900 (o el 1/1/1904, según el calendario que esté utilizando la hoja de cálculo).
Llamar a getFormattedValue () o getCalculatedValue () en lugar de getValue () debe devolver la fecha formateada como una cadena legible para el ser humano de acuerdo con la máscara numérica de la celda.
Alternativamente, la solución de Sergey prueba si la celda tiene una máscara de fecha y hora y llama al método auxiliar adecuado para convertir esa marca de tiempo serializada de Excel en una marca de tiempo de Unix, luego usa la función de fecha de PHP normal para formatearla como legible para humanos de acuerdo con el valor de $ formato. Existe un método auxiliar similar PHPExcel_Shared_Date :: ExcelToPHPObject () que convertirá una marca de tiempo serializada de Excel en un objeto DateTime de PHP
Puede obtener los valores de celda como cadena (también los valores de fecha) de esta manera:
$sheet = $objPHPExcel->getActiveSheet();
$lastRow = $sheet->getHighestRow();
$lastColumn = $sheet->getHighestColumn();
$rows = $sheet->rangetoArray(''A2:''.$lastColumn . $lastRow, NULL, True, True, False);
foreach ($rows as $row => $cols) {
foreach($cols as $col => $cell) {
echo trim($cell).''<br>''; // Gives the value as string
}
}