29

我正在尝试使用 PHPExcel 从 excel 中获取日期。但我没有得到日期,我得到的字符串值不是 1970 的秒数。

我试过的代码是

$InvDate=trim($excel->getActiveSheet()->getCell('B' . $i)->getValue());
4

5 回答 5

59

尝试使用

$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

于 2013-10-30T06:26:49.657 回答
13

对于日期, getValue() 应该返回一个浮点数,这是该日期/时间的 Excel 序列化时间戳值......我怀疑是您的 trim() 将其转换为字符串。实际值是自 1900 年 1 月 1 日以来的天数(或 1904 年 1 月 1 日,具体取决于电子表格使用的日历)。

调用 getFormattedValue() 或 getCalculatedValue() 而不是 getValue() 应根据单元格的 numberformatmask 返回格式化为人类可读字符串的日期。

或者,Sergey 的解决方案测试单元格是否具有日期/时间数字格式掩码,并调用适当的辅助方法将该 Excel 序列化时间戳转换为 unix 时间戳,然后使用普通 PHP 日期函数根据 $ 的值将其格式化为人类可读格式。有一个类似的帮助方法 PHPExcel_Shared_Date::ExcelToPHPObject() 将 Excel 序列化时间戳转换为 PHP DateTime 对象

于 2013-10-30T08:10:26.773 回答
2

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); 
}
于 2017-07-13T01:52:11.980 回答
0

您可以通过这种方式将单元格值作为字符串(也是日期值)获取:

$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
    }
}
于 2018-04-11T08:34:18.737 回答
-1
$cell = $excel->getActiveSheet()->getCell('B' . $i);
$InvDate= $cell->getValue();
$InvDate= PHPExcel_Shared_Date::ExcelToPHPObject($InvDate)->format('Y-m-d H:i:s');

尝试这个

于 2020-02-10T12:16:19.223 回答