Laravel Excel将日期从标题转换为某些数字

时间:2018-05-23 07:08:28

标签: php laravel laravel-excel

我遇到了与Laravel Excel相关的问题。我的标题填写日期,例如:2018-05-23。但是当我用excel扩展名阅读它时使用:

 $data = Excel::load($request['file'], function($reader) {})->get();

扩展名未将标题日期视为日期。而不是将日期转换为某些数字 - 例如:43243

以下是表单的dd

enter image description here

重要提示:当日期位于正常行(不在标题中)时,日期会很好地转换。

Laravel Excel版本(maatwebsite / excel) - 2.1.0
Laravel版本 - 5.5

3 个答案:

答案 0 :(得分:2)

我认为由于ExcelParser。它将日期标题字段转换为一些随机数字。

因此,为了使其符合您的要求,请在双引号内添加列标题。

示例:“2018-05-23”

https://github.com/Maatwebsite/Laravel-Excel/blob/2.1/src/Maatwebsite/Excel/Parsers/ExcelParser.php#L284

答案 1 :(得分:2)

数字来自excel本身,日期作为数字值存储在excel中。 http://www.cpearson.com/excel/datetime.htm

对于 Laravel 框架 5.6 maatwebsite / excel 软件包版本 3.1 ,要将日期从excel数字转换为正常日期格式,可以使用此功能PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($dateFromExcel)。它接受整数(excel日期)并返回DateTime对象。

更多信息,请点击https://github.com/Maatwebsite/Laravel-Excel/issues/1832

答案 2 :(得分:0)

maatwebsite软件包在日期前插入“。 要解决此问题

class yourExport implements  , WithMapping,  WithCustomCsvSettings, WithColumnFormatting
{
.....
public function map($map): array
    {
        return [
            Date::dateTimeToExcel($map->created_at),
            ...
         ];
     } 
public function columnFormats(): array
    {
        return [
            'A' => NumberFormat::FORMAT_DATE_DDMMYYYY    
        ];
    }
}

其中 A 是日期所在的excel列