Spreadsheet_excel_readerdate格式

我使用spreadsheet_excel_reader读取PHP上的xls文件,并将数据插入到数据库。 我使用下面的代码:

$filename = 'test.xls'; $reader=new Spreadsheet_Excel_Reader(); $reader->setUTFEncoder('iconv'); $reader->setOutputEncoding('CP1251'); $reader->read($filename); for($r=1; $r<=$reader->sheets[0]['numRows']; $r++) { for($c=1; $c<=$reader->sheets[0]['numCols']; $c++) { if (isset($reader->sheets[0]['cells'][$r][$c])) { //I'm using this code to get the value echo $reader->sheets[0]['cells'][$r][$c]; } } } 

我的问题是,当我尝试读取date值,而不是显示“01/11/2014”,它显示“41944”。 任何人都可以帮助我?

您正在阅读的值实际上是一个MS Excel时间戳,通常是自1900年1月1日以来的天数(尽pipe如果电子表格使用Mac 1904日历,可能是自1904年1月1日以来的天数)

您需要将其转换为Unix时间戳,以便使用PHPdate函数….取决于正在使用哪个日历,快速而脏的转换:

Windows 1900日历

 $unixTimestamp = ($excelTimestamp - 25569) * 86400; 

并相反

 $excelTimestamp = ($unixTimestamp / 86400) + 25569; 

Mac 1904日历

 $unixTimestamp = ($excelTimestamp - 24107) * 86400; 

并相反

 $excelTimestamp = ($unixTimestamp / 86400) + 24107; 

所以MS Excel 41944 => $unixTimestamp = (41944 - 25569) * 86400; 给予1414800000这是1st November 2014的unix时间戳

一旦你有了一个unix时间戳,你可以使用PHP的标准date()函数或DateTime对象来操作和格式化它

 echo date('dM-Y', $unixTimestamp);