【问题标题】:Laravel Excel convert change date formatLaravel Excel 转换更改日期格式
【发布时间】:2019-10-03 08:30:13
【问题描述】:

我正在尝试用 laravel excel 转换日期,下面是我的代码:

<?php

namespace App\Exports;

use App\Project;

use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithTitle;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;

class ProjectExport implements FromCollection, WithHeadings, WithMapping, ShouldAutoSize, WithTitle, WithEvents, WithColumnFormatting
{
    public function collection()
    {
        return Project::with('developer_projects')->get();
    }

    // Select data from query and set its position
    public function map($project): array
    {
        return [
            $project->name,
            Date::dateTimeToExcel($project->created_at),
            Date::dateTimeToExcel($project->start_date),
            Date::dateTimeToExcel($project->expiry_date),
        ];
    }

    // Set Date Format
    public function columnFormats(): array
    {
        return [
            'E' => NumberFormat::FORMAT_DATE_DDMMYYYY,
            'F' => NumberFormat::FORMAT_DATE_DDMMYYYY,
            'G' => NumberFormat::FORMAT_DATE_DDMMYYYY,
        ];
    }
}

所以我设法转换 created_at 和 expiry_date 字段,但由于某种原因我的开始日期无法转换,我收到此错误:

参数 1 传递给 PhpOffice\PhpSpreadsheet\Shared\Date::dateTimeToExcel() 必须实现 接口 DateTimeInterface,给定字符串

我已经在我的数据库中检查了它的日期字段。

start_date 和 expiry_date 是日期字段,created_at 是时间戳

如果我将excel默认转换为expiry_date和created_at:

2019-09-27 18:54:54

而 start_date 是这样的:

2014-10-22

【问题讨论】:

  • 它是否在数据库或 ProjectExport 类中显示错误的日期格式?当我知道时我会帮助你:-)
  • 嗨@Peterverleg 我已经稍微改变了我的问题,我设法转换了2个字段,但由于某种原因,其中1个被接受为字符串,即使它是一个日期字段

标签: php laravel laravel-5 eloquent laravel-excel


【解决方案1】:

start_date 添加到Project 模型中的$dates 属性

class Project extends Model
{
    protected $dates = ['created_at', 'updated_at', 'expiry_date', 'start_date'];
}

如果属性在$dates 中,则该字段将作为Carbon 的实例而不是简单的字符串返回,然后Maatwebsites Excel 将使用它来获取正确的格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 2018-02-08
    • 2013-04-01
    • 1970-01-01
    • 2016-09-05
    相关资源
    最近更新 更多