php - Laravel 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 字段但由于某种原因我的开始日期无法转换,我收到此错误:
传递给 PhpOffice\PhpSpreadsheet\Shared\Date::dateTimeToExcel() 的参数 1 必须实现接口 DateTimeInterface,给定字符串
我已经在我的数据库中检查了它的日期字段。
start_date 和 expiry_date 是日期字段, created_at 是时间戳
如果我将excel默认转换为expiry_date和created_at:
2019-09-27 18:54:54
而 start_date 看起来像这样:
2014-10-22
解决方案
添加start_date
到模型中的$dates
属性Project
class Project extends Model
{
protected $dates = ['created_at', 'updated_at', 'expiry_date', 'start_date'];
}
如果属性是 in $dates
,则该字段将作为 的实例Carbon
而不是简单的字符串返回,然后Maatwebsites
Excel
将使用它来获取正确的格式。
推荐阅读
- javascript - 从其他地方开始下一行
- c - 如何在内核 Linux 中工作内核 irq 线程?
- html - 更改表格中单个单元格的颜色
- node.js - 是否可以在不使用文件系统的情况下将图像传递给 tesseract,如果可以,如何?
- laravel - Laravel 使用 Elouqent 获取消息
- ios - 如何快速解析媒体:内容?
- c# - 有人可以解释我的代码在颜色深度处理中的逻辑吗?
- python - 如何在 NumPy 中构建设计矩阵(用于线性回归)?
- bokeh - 为什么 x_range_type 'datetime' 不能只使用一个字形/数据点?
- python - 意外翻转列表中的字典