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

Laravel:如何转换导入Excel文件中单元格的日期值

解决Maatwebsite Excel导入时日期序列号转Y-m-d格式问题

你遇到的44950是Excel的日期序列号(对应1900日期系统下的2023-01-24),可以通过以下几种方式转换为Y-m-d格式:

方法一:结合PhpSpreadsheet与Carbon(Laravel推荐)

Maatwebsite Excel底层依赖PhpSpreadsheet,其Date类提供了序列号转DateTime对象的方法,配合Carbon可以快速格式化:

use Carbon\Carbon;
use PhpOffice\PhpSpreadsheet\Shared\Date;

public function model(array $row)
{
    return new Event([
        // 其他字段
        'date' => Carbon::instance(Date::excelToDateTimeObject($row[1]))->format('Y-m-d'),
    ]);
}

方法二:原生PHP DateTime处理

如果不需要Carbon,直接用PhpSpreadsheet和原生DateTime:

use PhpOffice\PhpSpreadsheet\Shared\Date;

public function model(array $row)
{
    $dateObj = Date::excelToDateTimeObject($row[1]);
    return new Event([
        // 其他字段
        'date' => $dateObj->format('Y-m-d'),
    ]);
}

兼容CSV字符串日期与XLSX序列号

如果同时支持CSV(可能是d/m/Y格式的字符串)和XLSX(序列号),可以增加判断逻辑:

use Carbon\Carbon;
use PhpOffice\PhpSpreadsheet\Shared\Date;

public function model(array $row)
{
    $rawDate = $row[1];
    $formattedDate = '';

    if (is_numeric($rawDate)) {
        // 处理XLSX的日期序列号
        $formattedDate = Carbon::instance(Date::excelToDateTimeObject($rawDate))->format('Y-m-d');
    } else {
        // 处理CSV的字符串日期(如24/01/2023)
        $formattedDate = Carbon::createFromFormat('d/m/Y', $rawDate)->format('Y-m-d');
    }

    return new Event([
        // 其他字段
        'date' => $formattedDate,
    ]);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 07:50:35