You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP读取.xlsx文件日期年份仅显示两位的问题求助

解决PHPExcel读取.xlsx日期时年份仅两位的问题

这个坑我之前踩过!PHPExcel用toArray()读取日期时,会严格跟着Excel单元格的格式走,如果原单元格是dd/mm/yy这种短年份格式,就会把1929和2029都转成01-08-29,根本分不清。给你两个靠谱的解决办法:

方法一:读取原始日期序列号,手动转换为完整日期

Excel里的日期本质是一个序列号(从1900-01-00开始的天数,注意Excel有个1900闰年的小bug,但不影响转换)。我们可以跳过toArray()的自动格式化,直接读取单元格的原始值,再用PHPExcel的工具类转成带四位年份的日期:

$reader = PHPExcel_IOFactory::createReaderForFile($name);
$rawData = $reader->load($name);
$sheet = $rawData->getSheet(0);
$lastRow = $sheet->getHighestRow(); // 注意这里你之前写错了,应该用$sheet的getHighestRow,不是$rawData

$excel_arr = [];
for ($row = 1; $row <= $lastRow; $row++) {
    $cellValue = $sheet->getCell('A' . $row)->getValue();
    // 判断当前单元格是否为日期类型
    if (PHPExcel_Shared_Date::isDateTime($sheet->getCell('A' . $row))) {
        // 把Excel序列号转成PHP时间戳,再格式化为Y-m-d
        $timestamp = PHPExcel_Shared_Date::ExcelToPHP($cellValue);
        $excel_arr[$row]['A'] = date('Y-m-d', $timestamp);
    } else {
        // 非日期单元格直接保留原值
        $excel_arr[$row]['A'] = $cellValue;
    }
}

这种方法最可靠,完全不受Excel单元格格式的影响,不管原日期是1929还是2029,都会输出1929-08-01或2029-08-01,彻底解决混淆问题。

方法二:强制修改单元格的日期格式

如果不想循环读取单元格,或者需要保留原有的日期显示格式(比如dd-mm-yyyy),可以强制给日期单元格设置四位年份的格式,再读取格式化后的值:

$reader = PHPExcel_IOFactory::createReaderForFile($name);
$rawData = $reader->load($name);
$sheet = $rawData->getSheet(0);
$lastRow = $sheet->getHighestRow();

$excel_arr = [];
for ($row = 1; $row <= $lastRow; $row++) {
    $cell = $sheet->getCell('A' . $row);
    // 强制设置日期格式为四位年份(这里用内置的YYYY-MM-DD格式,也可以自定义)
    $cell->getStyle()->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YMD);
    // 或者自定义格式如'dd-mm-yyyy':
    // $cell->getStyle()->getNumberFormat()->setFormatCode('dd-mm-yyyy');
    $excel_arr[$row]['A'] = $cell->getFormattedValue();
}

这样读取出来的日期字符串会包含完整的四位年份,自然就能区分1929和2029了。

另外提个小细节:你原代码里的$sheet.toArray是语法错误,PHP里调用方法要用箭头->,也就是$sheet->toArray(),这个小问题也得修正哦。

内容的提问来源于stack exchange,提问作者Sri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:26:54