PHPExcel读取xlsx文件:将DateStamp格式转换为标准日期
解决PHPExcel中Excel日期序列号转可读日期的问题
Hey there, I see you're working with PHPExcel to read an XLSX file and need to convert those Excel date serial numbers (like the 43160 in cell A1 that should become 01/03/2018) into human-readable dates. Good news—PHPExcel has built-in tools to handle this without you having to calculate the date offset manually!
核心思路
Excel 把日期存储为从1900年1月0日(旧版Mac系统为1904年1月1日)开始计数的序列号。PHPExcel 的 PHPExcel_Shared_Date 类提供了两个便捷方法,能把这些序列号转成可用的PHP日期格式:
ExcelToPHP():将序列号转换为Unix时间戳ExcelToPHPObject():直接将序列号转换为PHPDateTime对象(适合灵活格式化或复杂日期操作)
完整代码示例
下面是整合到你现有代码中的实现:
require '../PHPExcel-1.8/Classes/PHPExcel/IOFactory.php'; require '../cnx/conection.php'; // 加载Excel文件 $objPHPExcel = PHPExcel_IOFactory::load('../../date.xlsx'); $activeSheet = $objPHPExcel->setActiveSheetIndex(0); $numRows = $activeSheet->getHighestRow(); // 引入日期处理类(如果自动加载未配置的话) require_once '../PHPExcel-1.8/Classes/PHPExcel/Shared/Date.php'; // 从第2行开始循环(假设第1行是表头) for ($i = 2; $i <= $numRows; $i++) { // 获取A列单元格的原始值(即类似43160的日期序列号) $excelDateSerial = $activeSheet->getCell('A' . $i)->getValue(); // 先验证单元格是否包含有效的Excel日期 if (PHPExcel_Shared_Date::isDateTime($activeSheet->getCell('A' . $i))) { // 方式1:转成时间戳后用date()格式化 $unixTimestamp = PHPExcel_Shared_Date::ExcelToPHP($excelDateSerial); $formattedDate = date('d/m/Y', $unixTimestamp); // 输出01/03/2018 // 方式2:转成DateTime对象,灵活性更高 $dateObject = PHPExcel_Shared_Date::ExcelToPHPObject($excelDateSerial); $formattedDateFromObj = $dateObject->format('d/m/Y'); // 这里替换成你的数据库插入或其他业务逻辑 echo "第{$i}行:转换后的日期为 {$formattedDate}\n"; } else { // 处理单元格不是有效日期的情况 echo "第{$i}行:A列不是有效的Excel日期\n"; } }
关键提示
- 用
isDateTime()做验证:转换前一定要检查单元格是否为有效日期,避免非日期值导致报错。 - 自定义日期格式:调整
date()或format()中的格式字符串就能得到你需要的样式,比如Y-m-d会输出2018-03-01。 - 1904日期系统兼容:PHPExcel会自动识别Excel文件是否使用1904(Mac)日期系统,无需额外处理。
内容的提问来源于stack exchange,提问作者user8717594
相关产品推荐
相关产品推荐

