我有一个使用Yii2框架开发的系统,我有一个Excel文件,其中包含导入系统的日期值,例如:
-------------------------------------------------
Name | Birthdate | Place of Birth
-------------------------------------------------
Archie | 1995-09-18 | Nevada
Gerry | 1989-01-23 | Gotham
我正在使用PHPExcel将数据读取到PHP,然后将数据设置为新数组,例如
Array
(
[0] => Array
(
[0] => Archie
[1] => 42265
[2] => Nevada
)
[1] => Array
(
[0] => Gerry
[1] => 36217
[2] => Gotham
)
)
这是从Excel文件读取数据后的数组结果。
您可以看到上面的结果,数组[0][1]
和[1][1]
中的数据不包含日期值,就像Excel文件中的日期数据一样。
任何人都知道如何解决这个问题?或者有人知道我为什么这么做?
这是阅读Excel文件的代码
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
$arrayData = [];
for ($row = 1; $row <= $highestRow; ++$row) {
$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
if (!is_null($rowData[0][0])) {
$arrayData[] = array_map(function($values) {
$tempArrayKey = [];
foreach ($values as $key => $value) {
$newKey = $key + 1;
$tempArrayKey[] = $newKey . '_' . $value;
}
return $tempArrayKey;
}, $rowData);
任何帮助将不胜感激。感谢
答案 0 :(得分:0)
你可以得到这样的日期字段:
$sheet->setCellValueByColumnAndRow(0, 1, "2014-10-16");
在单元格中设置字符串值,而不是日期。仅仅因为您将其解释为日期,并不意味着计算机程序会自动将其解释为日期。
或者
您可以在更新的代码中使用它:
$arr[$i] = date('Y-m-d', PHPExcel_Shared_Date::ExcelToPHP($birthdate));
答案 1 :(得分:0)
您应该按如下方式获取单元格值...
$excelDate = $cell->getValue(); // gives you a number like 44444, which is days since 1900
$stringDate = \PHPExcel_Style_NumberFormat::toFormattedString($excelDate, 'YYYY-MM-DD');
其中$ excelDate是单元格值(您的日期单元格值)和&#39; YYYY-MM-DD&#39;是您需要的日期格式。 \ PHPExcel_Style_NumberFormat :: toFormattedString是内置的PHPExcel函数。