2013-07-23 12 views
5

Sto usando php-excel-reader per leggere un file XLS nel mio script php, tutto funziona perfettamente, tranne per la lettura di una data. Restituisce semplicemente un oggetto non definito.lettura data xls in php

  • Il file XLS non è stato creato sul mio computer e non so con la versione stregone creata.
  • Se apro il file sul mio computer e lo salvo di nuovo, tutto funziona correttamente. (ma ovviamente preferirei evitare di doverlo fare)
  • Dopo aver eseguito alcuni scavi nello script php-excel-reader, sono riuscito a ottenere il valore estratto da XLS. Ad esempio, invece di 41397 2013/03/05 (d/m/a)

Alcune domande:

  • È questo risolvibile?
  • È possibile sfruttare il 41397? È un formato data noto?
  • C'è un altro script xsl su php in cui funzionerà senza dover modificare nulla?
+0

Ciò è causato dal formato di cella sbagliata. Prova a creare una data in Excel in formato data. Quindi cambia il formato della cella in numero e vedrai qualcosa come 41397. – user4035

+0

è quello che penso di sì, ma ho bisogno di farlo funzionare senza dover cambiare manualmente il formato della cella e tutto. – user1278743

+0

Utilizzare una libreria in grado di gestire le conversioni di date tra Excel e PHP, come [PHPExcel] (http://www.phpexcel.net) - hai taggato questo PHPExcel, ma in realtà non stai utilizzando PHPExcel; oppure http://stackoverflow.com/questions/11172644/php-convert-the-full-excel-date-serial-format-to-unix-timestamp/11172688#11172688 –

risposta

14

Secondo formato Excel 41397 is 2013-05-03

Excel memorizza date e gli orari come un numero che rappresenta il numero di giorni dal 1900-Jan-0, oltre a una parte frazionaria di una giornata di 24 ore:
ddddd.tttttt. Si chiama data seriale o data-ora seriale.

È possibile utilizzare il seguente codice per convertire il numero di data valida

function excelDateToDate($readDate){ 
    $phpexcepDate = $readDate-25569; //to offset to Unix epoch 
    return strtotime("+$phpexcepDate days", mktime(0,0,0,1,1,1970)); 
} 

php-excel-reader si suppone di fare questo, ma non so perché non lo sta facendo.

È possibile ottenere maggiori informazioni su come eccellere negozi risalgono here (non un riferimento autentico come MSDN)

Edit: Controllato PHPExcel, si presenta come la funzione statica PHPExcel_Shared_Date::ExcelToPHP($dateValue = 0, $adjustToTimezone = FALSE, $timezone = NULL) fa questo.

+0

grazie, ho provato a convertirlo in una data valida anch'io , ma non sapevo del -25569. – user1278743

+0

-25569 per regolare dal 1900-gen-0 a Unix Epoch (1 gennaio 1970 00:00:00 GMT) ed Excel pensa che esista la data 1900-Feb-29 – bansi

1

Un modo semplice ...

<?php $date = date_create('30-12-1899'); date_add($date, date_interval_create_from_date_string('41397 days')); echo date_format($date, 'Y-m-d'); ?>