PHP: установка даты данных из Excel в массив в качестве значения

У меня есть система, которая разработана с использованием Yii2 framework, и у меня есть файл Excel, который состоит из значения даты, импортированного в систему, например:

ExcelFile

-------------------------------------------------
    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.

У кого-нибудь есть идея, как это решить? или кто-нибудь знает, почему я получил это?

Edtitted

Код в контроллере

Это код для чтения файла 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);

Любая помощь будет оценена. Спасибо

2 ответа

  1. вы можете получить поле даты следующим образом:
    $sheet->setCellValueByColumnAndRow(0, 1, "2014-10-16");
    Задает строковое значение в ячейке, а не дату. Просто потому, что вы интерпретируете это как дату, не означает, что компьютерные программы автоматически интерпретируют это как дату.
    Или

    Это можно использовать в обновленном коде:
    $arr[$i] = date('Y-m-d', PHPExcel_Shared_Date::ExcelToPHP($birthdate));

  2. Вы должны получить значение ячейки следующим образом…

    $excelDate = $cell->getValue(); // gives you a number like 44444, which is days since 1900
    $stringDate = \PHPExcel_Style_NumberFormat::toFormattedString($excelDate, 'YYYY-MM-DD');
    

    где $excelDate — это значение ячейки (ваше значение ячейки даты), а ‘YYYY-MM-DD-это формат даты, который вам нужен. \PHPExcel_Style_NumberFormat:: toFormattedString-это встроенная функция PHPExcel.