我正在使用电子表格_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];
}
}
}
我的问题是,当我尝试读取日期值时,它显示的不是“01/11/2014”,而是“41944”。有人可以帮助我吗?
您正在读取的值实际上是 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 Excel41944
=> $unixTimestamp = (41944 - 25569) * 86400;
giving 1414800000
这是 UNIX 时间戳1st November 2014
一旦你有了 unix 时间戳,你就可以使用 PHP 的标准 date() 函数或 DateTime 对象来按照你的意愿操作和格式化它
echo date('d-M-Y', $unixTimestamp);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)