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'])),

Read more about strtotime function

您好,您可以使用 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),

我认为这不是一个很好的解决方案,但在接下来的很多年里都会奏效。

感谢大家的贡献。