2012-06-20 129 views
18

Estoy leyendo la fecha de excel que está en este formato 12/5/2012 día/mes/año usando este código para leer. usando PHP EXCELConversión de fecha de Excel usando PHP Excel

PHPExcel_Style_NumberFormat::toFormattedString($value['A'],'YYYY-MM-DD'); 

su trabajo como convertir el encanto de la fecha anteriormente '12/5/2012' a '05/12/2012'

Ahora el problema es si la fecha es deja dice 18/5/2012 o se puede decir si fijo días mayor que 12 me da esta fecha 18/5/2012 en este formato 18/5/2012 después de formatear

he intentado esta cosa, así

 $temp = strtotime( PHPExcel_Style_NumberFormat::toFormattedString($value['A'],'YYYY-MM-DD'); 
     $actualdate = date('Y-m-d',$temp) ; 

Esto también está convirtiendo la fecha '12/5/2012 'correcto, pero en este caso 18/5/2012 da salida como 1970-01-01

+0

el ejemplo que usted da todavía no se está convirtiendo correctamente - 12/5/2012 cuando se convierte de formato UK a ISO debería regresar 2012-05-12 – SeanC

+0

sí, tiene razón no se han dado cuenta de que ..... para poder obtener este formato 2012- 05-12 tengo que hacer una cuerda formato como este YYYY-DD-MM –

+1

¿El valor es una marca de fecha y hora de Excel o es una cadena? Si es el primero, ¿por qué no utilizar los métodos de conversión PHPExcel_Shared_Date como ExcelToPHP() o ExcelToPHPObject()? Si este último, entonces no debe usar toFormattedString() –

Respuesta

0

Parece que su variable es una cadena o está a la espera de una fecha de formato estadounidense.
uso 'DateTime :: createFromFormat' para lanzar la fecha en un formato de fecha real

$date = DateTime::createFromFormat('d/m/y', $value['A']); 
echo $date->format('Y-m-d'); 
+0

gracias, intente y sepa –

+0

Error fatal: Llamar a un formato de función de miembro() en un objeto no me da este error estoy usando php 5.4.3 –

+1

si el eco no funciona, entonces es un problema menor - 'PHPExcel_Style_NumberFormat :: toFormattedString (DateTime :: createFromFormat ('d/m/y', $ value ['A']), 'YYYY-MM-DD'); ' – SeanC

50

favor, utilice esta fórmula para cambiar la fecha de Excel hasta la fecha Unix, entonces usted puede utilizar "gmdate" para obtener la cita de verdad en PHP:

UNIX_DATE = (EXCEL_DATE - 25569) * 86400 

y convertir de fecha Unix hasta la fecha Excel, utilice esta fórmula:

EXCEL_DATE = 25569 + (UNIX_DATE/86400) 

Después de poner esta fórmula en una variable , Se puede obtener la fecha real en PHP usando este ejemplo:

$UNIX_DATE = ($EXCEL_DATE - 25569) * 86400; 
echo gmdate("d-m-Y H:i:s", $UNIX_DATE); 
+0

Perfecto. ¿Pero podría explicar la importancia de 25569 y 86400? – idok

+2

Yo puedo. El 86400 es el número de segundos en un día = 24 * 60 * 60. El 25569 es el número de días desde el 1 de enero de 1900 al 1 de enero de 1970. La fecha base de Excel es el 1 de enero de 1900 y Unix es el 1 de enero de 1970. Los valores de fecha de UNIX están en segundos desde el 1 de enero de 1970 (medianoche del 31 de diciembre de 1969). Entonces, para convertir de Excel debe restar el número de días y luego convertirlo a segundos. – TJChambers

+1

¿Podemos usar la función build-int enFormattedString?echo PHPExcel_Style_NumberFormat :: toFormattedString (42033, 'YYYY-MM-DD'); saldrá a la venta el 2015-01-29 –

2

una manera fácil ...

<?php 
    $date = date_create('30-12-1899'); 

    date_add($date, date_interval_create_from_date_string("{$value['A']} days")); 
    echo date_format($date, 'Y-m-d'); 
16

Al utilizar PHPExcel puede utilizar el construido en función de:

$excelDate = $cell->getValue(); // gives you a number like 44444, which is days since 1900 
$stringDate = \PHPExcel_Style_NumberFormat::toFormattedString($excelDate, 'YYYY-MM-DD'); 
+0

La mejor respuesta hasta el momento ... Trabajando de forma perfecta y muy segura y fácil de usar ... ¡¡Gracias !!! –

+0

¡De nada! – caponica

+0

muy útil, gracias! – adrianp