如何使用PHPExcel库从excel获取日期

use*_*950 29 php date phpexcel

我正在尝试使用PHPExcel从excel获取Date.但我没有得到约会,我得到的字符串值不是1970年的秒数.

我试过的代码是

$InvDate=trim($excel->getActiveSheet()->getCell('B' . $i)->getValue());
Run Code Online (Sandbox Code Playgroud)

Ser*_*gey 56

试试用

$cell = $excel->getActiveSheet()->getCell('B' . $i);
$InvDate= $cell->getValue();
if(PHPExcel_Shared_Date::isDateTime($cell)) {
     $InvDate = date($format, PHPExcel_Shared_Date::ExcelToPHP($InvDate)); 
}
Run Code Online (Sandbox Code Playgroud)

PS

@DiegoDD:应该提到$ format是日期所需的格式.例如:

 $InvDate = date($format = "Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($InvDate)); 
Run Code Online (Sandbox Code Playgroud)

PPS 2019看看答案@ gabriel-lupu,新版PhpOffice /sf/answers/3154914381/

  • 应该提到$ format是日期所需的格式.例如`$ InvDate = date($ format ="Ymd",PHPExcel_Shared_Date :: ExcelToPHP($ InvDate)); ` (2认同)

Mar*_*ker 13

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

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

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