Laravel-Excel 3.1 csv 导入日期列未转换
Laravel-Excel 3.1 csv import Date column not converting
我正在尝试使用 Laravel-Excel 3.1 导入 csv 文件。在 csv 文件中有一个日期列,它的格式是 'dd/mm/yy',例如 - “24/07/20”。我正在使用 ToModel 方法。如何以“yyyy/mm/dd”的格式保存数据库,例如 - “2020/07/24”。我的代码如下。
class DeviceDataImport implements ToModel, WithHeadingRow
{
private $counterNumber;
public function __construct($counterNumber)
{
HeadingRowFormatter::default('none');
$this->counter = $counterNumber;
}
public function model(array $row)
{
return new DeviceData([
'counter_id' => $this->counter,
'date' => $row['DATE'],
'amount' => $row['AMOUNT'
}
}
试试这个...
'date' => date('Y-m-d', strtotime($row['DATE'])),
您好,您可以使用 Carbon 创建日期实例,因此您应该
DeviceData::create([
'counter_id' => $this->counter,
'date' => Carbon::createFromFormat('Y/m/d', $row['DATE']),
'amount' => $row['AMOUNT']
]);
如果日期不正确,您可能想使用验证,但要确保它是那种格式
同样,我不知道计数器是否符合我的想法,但它可以从导入中获取,请参阅 - https://docs.laravel-excel.com/3.1/imports/chunk-reading.html#keep-track-of-the-row-number
希望对您有所帮助谢谢
Carbon 的 createFromFormat()
要求您定义 输入 格式。
在这种情况下,24/07/20 的输入格式是 d/m/y
,而不是其他答案中使用的格式。
有关参数列表,请参阅 PHP: DateTime::format。
'date' => Carbon::createFromFormat('d/m/y', $row['DATE']),
如果您不想使用 Carbon 实例保存模型,您可以将日期格式化为字符串。这是您定义特定输出格式的地方。
'date' => Carbon::createFromFormat('d/m/y', $row['DATE'])->format('Y/m/d'),
最后,我采用了如下手动方法。
$year = Carbon::createFromFormat('d/m/Y', $row['DATE'])->year;
$month = Carbon::createFromFormat('d/m/Y', $row['DATE'])->month;
$day = Carbon::createFromFormat('d/m/Y', $row['DATE'])->day;
然后我根据我的项目手动连接并重新格式化日期。
'date' => Carbon::createFromFormat('d/m/Y', $day . '/' . $month . '/' . 20 . '' . $year),
我认为这不是一个很好的解决方案,但在接下来的很多年里都会奏效。
感谢大家的贡献。
我正在尝试使用 Laravel-Excel 3.1 导入 csv 文件。在 csv 文件中有一个日期列,它的格式是 'dd/mm/yy',例如 - “24/07/20”。我正在使用 ToModel 方法。如何以“yyyy/mm/dd”的格式保存数据库,例如 - “2020/07/24”。我的代码如下。
class DeviceDataImport implements ToModel, WithHeadingRow
{
private $counterNumber;
public function __construct($counterNumber)
{
HeadingRowFormatter::default('none');
$this->counter = $counterNumber;
}
public function model(array $row)
{
return new DeviceData([
'counter_id' => $this->counter,
'date' => $row['DATE'],
'amount' => $row['AMOUNT'
}
}
试试这个...
'date' => date('Y-m-d', strtotime($row['DATE'])),
您好,您可以使用 Carbon 创建日期实例,因此您应该
DeviceData::create([
'counter_id' => $this->counter,
'date' => Carbon::createFromFormat('Y/m/d', $row['DATE']),
'amount' => $row['AMOUNT']
]);
如果日期不正确,您可能想使用验证,但要确保它是那种格式
同样,我不知道计数器是否符合我的想法,但它可以从导入中获取,请参阅 - https://docs.laravel-excel.com/3.1/imports/chunk-reading.html#keep-track-of-the-row-number
希望对您有所帮助谢谢
Carbon 的 createFromFormat()
要求您定义 输入 格式。
在这种情况下,24/07/20 的输入格式是 d/m/y
,而不是其他答案中使用的格式。
有关参数列表,请参阅 PHP: DateTime::format。
'date' => Carbon::createFromFormat('d/m/y', $row['DATE']),
如果您不想使用 Carbon 实例保存模型,您可以将日期格式化为字符串。这是您定义特定输出格式的地方。
'date' => Carbon::createFromFormat('d/m/y', $row['DATE'])->format('Y/m/d'),
最后,我采用了如下手动方法。
$year = Carbon::createFromFormat('d/m/Y', $row['DATE'])->year;
$month = Carbon::createFromFormat('d/m/Y', $row['DATE'])->month;
$day = Carbon::createFromFormat('d/m/Y', $row['DATE'])->day;
然后我根据我的项目手动连接并重新格式化日期。
'date' => Carbon::createFromFormat('d/m/Y', $day . '/' . $month . '/' . 20 . '' . $year),
我认为这不是一个很好的解决方案,但在接下来的很多年里都会奏效。
感谢大家的贡献。