我正在尝试使用 PHPExcel 从 excel 中获取日期。但我没有得到日期,我得到的字符串值不是 1970 的秒数。
我试过的代码是
$InvDate=trim($excel->getActiveSheet()->getCell('B' . $i)->getValue());
尝试使用
$cell = $excel->getActiveSheet()->getCell('B' . $i);
$InvDate= $cell->getValue();
if(PHPExcel_Shared_Date::isDateTime($cell)) {
$InvDate = date($format, PHPExcel_Shared_Date::ExcelToPHP($InvDate));
}
附言
@DiegoDD:应该提到 $format 是日期的所需格式。例如:
$InvDate = date($format = "Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($InvDate));
PPS 2019 查看答案@gabriel-lupu,使用新版本的 PhpOffice https://stackoverflow.com/a/45070205/426533
对于日期, getValue() 应该返回一个浮点数,这是该日期/时间的 Excel 序列化时间戳值......我怀疑是您的 trim() 将其转换为字符串。实际值是自 1900 年 1 月 1 日以来的天数(或 1904 年 1 月 1 日,具体取决于电子表格使用的日历)。
调用 getFormattedValue() 或 getCalculatedValue() 而不是 getValue() 应根据单元格的 numberformatmask 返回格式化为人类可读字符串的日期。
或者,Sergey 的解决方案测试单元格是否具有日期/时间数字格式掩码,并调用适当的辅助方法将该 Excel 序列化时间戳转换为 unix 时间戳,然后使用普通 PHP 日期函数根据 $ 的值将其格式化为人类可读格式。有一个类似的帮助方法 PHPExcel_Shared_Date::ExcelToPHPObject() 将 Excel 序列化时间戳转换为 PHP DateTime 对象
In the new version of the library, PhpOffice, the function that handles this is excelToDateTimeObject so the new code format should be:
$cell = $excel->getActiveSheet()->getCell('B' . $i);
$InvDate= $cell->getValue();
if (PhpOffice\PhpSpreadsheet\Shared\Date::isDateTime($cell)) {
$InvDate = PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($InvDate);
}
您可以通过这种方式将单元格值作为字符串(也是日期值)获取:
$sheet = $objPHPExcel->getActiveSheet();
$lastRow = $sheet->getHighestRow();
$lastColumn = $sheet->getHighestColumn();
$rows = $sheet->rangetoArray('A2:'.$lastColumn . $lastRow, NULL, True, True, False);
foreach ($rows as $row => $cols) {
foreach($cols as $col => $cell) {
echo trim($cell).'<br>'; // Gives the value as string
}
}
$cell = $excel->getActiveSheet()->getCell('B' . $i);
$InvDate= $cell->getValue();
$InvDate= PHPExcel_Shared_Date::ExcelToPHPObject($InvDate)->format('Y-m-d H:i:s');
尝试这个