Laravel PHPExcel 将日期转换为双精度

Posted

技术标签:

【中文标题】Laravel PHPExcel 将日期转换为双精度【英文标题】:Laravel PHPExcel convert date into double 【发布时间】:2017-04-08 12:35:50 【问题描述】:

我尝试使用 Laravel 5.4 导入一个带有由 phpExcel 格式化为 DATE 的列的 excel 文件。 PHPExcel 将文件和输出日期读取为双数。 PHP 的 date() 函数无法转换成日期导入数据库。

有人遇到同样的问题吗?

更新:这是我的代码

Excel::filter('chunk')
                ->selectSheetsByIndex(1)
                ->load(config('excel.import.storage').$fileName)
                ->chunk(1000, function($rows) 
                    foreach ($rows as $i=>$row) 
                        dd($row->toArray());
                    
            );

Excel 列中的日期是 03/03/2017。输出为 42797.0 所以,date() 函数不能工作。

【问题讨论】:

至少提供了您尝试过的东西?还提供一个示例,说明您通过 PHPExcel 阅读本专栏后得到的内容。 Excel date conversion using PHP Excel的可能重复 【参考方案1】:

在内部,MS Excel 将日期存储为浮点数/双精度数、序列化时间戳(类似于 Unix 时间戳,但计算天数而不是秒数,并且具有不同的基准日期)。我对 laravel 的 Maatwebsite 包装器不够熟悉,无法解释为什么 ->formatDates(true) 没有将该时间戳转换为格式化的日期/时间,但 PHPExcel 确实提供了在 Excel 时间戳和格式化的日期/时间之间转换的本机功能(或者实际上到 \PHPExcel_Shared_Date 类中的 unix 时间戳或 DateTime 对象。

【讨论】:

对不起! “->formatDates(true)”是我在发布代码之前没有删除的错误。【参考方案2】:

感谢你们的 cmets。我发现自己的答案比我想象的要容易。您认为以下导入 Excel 文件的代码具有日期列。

Excel::selectSheetsByIndex(1)
                    ->load(config('excel.import.storage').$fileName, function ($reader)
                        $rows = $reader->all();
                        dd($rows[0]->ngay->format('Y-m-d'));
                    );

结果将打印为您的格式字符串 d-m-Y, m-d-Y, ...

【讨论】:

以上是关于Laravel PHPExcel 将日期转换为双精度的主要内容,如果未能解决你的问题,请参考以下文章

PHPExcel 返回一个奇怪的日期格式

将列的数据类型从字符串转换为双精度

php怎么把中文的日期转换成整型

使用 '%' 将字符串转换为双精度

PHPExcel 日期格式

将内存流转换为双数组?