Laravel-Excel 3.1 csv 导入日期列未转换

问题描述

我试图使用 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'
    }
}

解决方法

嗨,您可以使用 Carbon 创建一个日期实例,因此您应该有

DeviceData::create([
            'counter_id' => $this->counter,'date'  => Carbon::createFromFormat('Y/m/d',$row['DATE']),'amount' => $row['AMOUNT']
           ]);

如果日期是其他明智的,您可能想要使用验证,但要确保它是那种格式

同样,我不知道 counter 是否是我所想的,但可以从导入中获取,请参阅 - 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',

如果您不想使用 Carbon 实例保存模型,您可以将日期格式化为字符串。您可以在此处定义特定的输出格式。

'date' => Carbon::createFromFormat('d/m/y',$row['DATE'])->format('Y/m/d'),
,

最后,我采用了如下手动方法。

SELECT TO_DATE(NULLIF(dt,''),'yyyymmdd' or ’yyyy-MM-dd hh:mm:ss' or 'yyyy-MM-dd')

之后,我根据我的项目手动连接并重新格式化日期。

if(somedate==null){

}
else if(somedate.length==10){
    somedate=str2date(somedate,"yyyy-MM-dd")
}else if(somedate.length==8){
    somedate=str2date(somedate,"yyyyMMdd")
}else if (somedate.length==19){
    somedate=str2date(somedate,"yyyy-MM-dd hh:mm:ss")
}else{
    somedate=null
}

somedate=date2str(somedate,'yyyy-MM-dd hh:mm:ss')

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

感谢所有贡献想法的人。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...