Spreadsheet_excel_reader日期格式

时间:2015-01-27 09:37:22

标签: php excel date

我使用spreadsheet_excel_reader读取php上的xls文件并将数据插入到oracle数据库中。我使用以下代码:

$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];
      }
   }
}

我的问题是,当我尝试阅读日期值时,而不是显示&#39; 01/11 / 2014&#39;,它会显示&#39; 41944&#39;。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:4)

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

您需要将其转换为Unix时间戳才能使用PHP日期函数....根据正在使用的日历,快速而又脏的转换:

Windows 1900日历

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

和反向

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

Mac 1904日历

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

和反向

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

所以MS Excel 41944 =&gt; $unixTimestamp = (41944 - 25569) * 86400;提供1414800000,这是1st November 2014

的unix时间戳

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

echo date('d-M-Y', $unixTimestamp);