我正在使用eBook_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 Excel 41944 => $unixTimestamp =(41944-25569)* 86400;给出1414800000,这是2014年11月1日的Unix时间戳
有了unix时间戳后,即可使用PHP的标准date()函数或DateTime对象按需对其进行操作和格式化
echo date('d-M-Y', $unixTimestamp);
标签:php,excel,date
来源: https://codeday.me/bug/20191028/1954610.html