Convertir fechas de excel a PHP
Un archivo de Microsoft Excel almacena las fechas en un formato numérico que corresponde a los días desde el 1 de enero de 1900, teniendo en cuenta que php las fechas las guarda a partir de 1970 y en segundos pues es un poco engorroso convertir una fecha de un formato a otro, para ello PHPExcel de codeplex tiene una clase llamada PHPExcel_Shared_Date con una función estática que hace esta operación, la función como tal se llama ExcelToPHP y devuelve la cantidad de segundos correspondientes a la fecha en PHP.
Podemos utilizarla de la siguiente forma:
// leo el archivo excel
$objPHPExcel = HPExcel_IOFactory::load('prueba.xlsx');
// utilizo como activa la hoja 1
$objPHPExcel->setActiveSheetIndex(0);
$objWorksheet = $objPHPExcel->getActiveSheet();
// obtengo el valor de la celda
$fecha_excel = objWorksheet->getCell('A1')->getValue();
// utilizo la función y obtengo el timestamp
$timestamp = PHPExcel_Shared_Date::ExcelToPHP($fecha);
$fecha_php = date("Y-m-d H:i:s",$timestamp);
Comentarios
y siempre tengo que sumale un dia sino me muestra el dia anterior indicado en el excel:
$timestamp = PHPExcel_Shared_Date::ExcelToPHP($val);
$timestamp = strtotime("+1 day",$timestamp);
$fecha = date("d/m/Y", $timestamp);
en mi excel dice: 04/10/2011 y con el ejemplo que pones sale: 03/10/2011.
Gracias por tu ayuda.
Resumido también puede ser:
$mifecha = date("Y-m-d", PHPExcel_Shared_Date::ExcelToPHP( $worksheet->getCellByColumnAndRow(5, $row)->getValue() + 1 ) );
Saludos :D
Atte Vic
Me ha venido genial pues usaba la librería para escribir en EXCELS y estaba buscando algún script para transformar los números cuando la librería lo soluciona sin problemas.
saludos
La solución es como has hecho tu, adaptarlo y restarle o sumarle la diferencia horaria con GMT, en mi caso suelen ser 1 o 2 horas dependiendo del horario de verano o no.
Saludos
Creo que hay un pequeño fallo en el código...donde dice:
// utilizo la función y obtengo el timestamp
$timestamp = PHPExcel_Shared_Date::ExcelToPHP($fecha);
Creo que deberia ser:
// utilizo la función y obtengo el timestamp
$timestamp = PHPExcel_Shared_Date::ExcelToPHP($fecha_excel);
***Por lo menos a mi si me ha funcionado así, de la otra manera me salia un valor erróneo**
Saludos,
$fecha = gmdate("d/m/Y", $timestamp);
date("Y-m-d", strtotime("+1 day", PHPExcel_Shared_Date::ExcelToPHP($Fecha)));
Donde $Fecha es la fecha desde excel, le llame FIEXCEL, gracias de veras.
Y si tienes fechas vacías en el campo fecha? Que sean NULL
$fecha = date('Y-m-d',PHPExcel_Shared_Date::ExcelToPHP($fecha));
CAST('$fecha' AS DATE),
Como lo pones?