phpexcel日期读取格式错误

Bar*_*dia 2 php phpexcel

我知道有很多与此类似的问题,但实际上没有一个问题有帮助。

我的 excel 文件中有一个必须阅读的单元格。

Excel中的单元格日期

并且excel文件中的格式如下 Excel中的日期格式

在我的 php 代码中,我将它放在一个获取工作表名称和单元格以读取单元格的函数中。

$cellDate = $xls->getSheetByName($sheet)->getCell($cell)->getValue();
Run Code Online (Sandbox Code Playgroud)

我也用 getFormattedValue() 尝试过这个并得到了相同的结果

然后我得到了这个格式

$format = $xls->getSheetByName($sheet)->getCell($cell)->getStyle()->getNumberFormat()->getFormatCode();
Run Code Online (Sandbox Code Playgroud)

当我在 PHP 中回显时,它将日期显示为

13/4/2015 
Run Code Online (Sandbox Code Playgroud)

以及它显示的格式

mm-dd-yyyy
Run Code Online (Sandbox Code Playgroud)

它显示为 dd-mm-yyyy

我现在需要获得这些的 Ymd 格式我已经尝试使用 PHPExcel 中的所有可用函数,但结果仍然不正确。

我无法对格式进行硬编码,因为有多个单元格具有多种格式,我需要它自己理解

我试过使用

$objPHPExcel->getActiveSheet()
->getStyle('A1')
->getNumberFormat()
->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2 );
Run Code Online (Sandbox Code Playgroud)

我真的需要这个,我已经浪费了 1 周时间。

无论如何要告诉 PHPEXCEL 将单元格中的任何日期解析为 Ymd 格式?

更新

当我阅读评论时,我回去检查了我写的函数,我发现其中一个单元格 [甚至] 在 Excel 中格式化,它解析的格式错误,在这种情况下是通用格式;

然后我得到了 getValue() 和 getFormattedValue() 的值,并比较了这两个值,如果它们不相同,这意味着它的格式正确,我可以使用 PHPExcel 从中获取日期。

BUT ,(总有一个但是)。感谢微软和它的 excel 我仍然无法区分 2016 年 2 月 1 日和 1 月 2 日!这永远是个问题。

我唯一的建议是永远不要相信 excel 格式!

Mar*_*ker 5

如果getValue()getFormattedValue()两者都返回一个包含字符串,13/4/2015那么您的单元格内容不是 MS Excel 日期/时间值而是标准字符串,并且尝试将日期格式掩码应用于字符串将不会实现任何目标。PHPExcel 的日期格式功能只有在单元格内容确实是 MS Excel 序列化日期时间值时才有效,而不仅仅是字符串。

您必须使用标准的 PHP 函数,如 DateTime::createFromFormat() 将字符串值转换为日期时间对象,然后可以使用该format()方法将其转换为您想要的任何格式。

或者,尝试将值传递给 PHPExcel_Shared_Date::PHPToExcel() 以将其转换为 MS Excel 序列化时间戳;并将其设置为单元格值,然后您可以设置格式掩码并使用getFormattedValue().