Laravel Excel convert 更改日期格式
Laravel Excel convert change date format
我正在尝试使用 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 字段,但由于某种原因我的开始日期无法转换,我收到此错误:
Argument 1 passed to
PhpOffice\PhpSpreadsheet\Shared\Date::dateTimeToExcel() must implement
interface DateTimeInterface, string given
我已经在我的数据库中检查了它的日期字段。
start_date和expiry_date是日期字段,created_at是时间戳
如果我将 excel 默认转换为 expiry_date 和 created_at :
2019-09-27 18:54:54
而 start_date 是这样的:
2014-10-22
将 start_date
添加到 Project
模型中的 $dates
属性
class Project extends Model
{
protected $dates = ['created_at', 'updated_at', 'expiry_date', 'start_date'];
}
如果属性在 $dates
中,该字段将作为 Carbon
的实例返回,而不是简单的字符串,然后 Maatwebsites
Excel
将使用它以获得正确的格式。
我正在尝试使用 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 字段,但由于某种原因我的开始日期无法转换,我收到此错误:
Argument 1 passed to PhpOffice\PhpSpreadsheet\Shared\Date::dateTimeToExcel() must implement interface DateTimeInterface, string given
我已经在我的数据库中检查了它的日期字段。
start_date和expiry_date是日期字段,created_at是时间戳
如果我将 excel 默认转换为 expiry_date 和 created_at :
2019-09-27 18:54:54
而 start_date 是这样的:
2014-10-22
将 start_date
添加到 Project
模型中的 $dates
属性
class Project extends Model
{
protected $dates = ['created_at', 'updated_at', 'expiry_date', 'start_date'];
}
如果属性在 $dates
中,该字段将作为 Carbon
的实例返回,而不是简单的字符串,然后 Maatwebsites
Excel
将使用它以获得正确的格式。