формат как получить дату от Excel с помощью библиотеки PHPExcel




phpexcel изменить ячейку (4)

В новой версии библиотеки PhpOffice функция, которая обрабатывает это, - excelToDateTimeObject поэтому новый формат кода должен быть:

$cell = $excel->getActiveSheet()->getCell('B' . $i);
$InvDate= $cell->getValue();
if (PhpOffice\PhpSpreadsheet\Shared\Date::isDateTime($cell)) {
     $InvDate = PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($InvDate); 
}

Я пытаюсь получить Date from excel с помощью PHPExcel. Но я не получаю дату, я получаю строковое значение, которое не является секундой с 1970 года.

Код, который я пробовал, - это

$InvDate=trim($excel->getActiveSheet()->getCell('B' . $i)->getValue());

Answer #1

Вы можете получить значения ячеек как строки (также значения даты) следующим образом:

$sheet = $objPHPExcel->getActiveSheet();
$lastRow = $sheet->getHighestRow();
$lastColumn = $sheet->getHighestColumn();

$rows = $sheet->rangetoArray('A2:'.$lastColumn . $lastRow, NULL, True, True, False);
foreach ($rows as $row => $cols) {
    foreach($cols as $col => $cell) {
        echo trim($cell).'<br>'; // Gives the value as string
    }
}

Answer #2

Для даты getValue () должен возвращать float, который представляет собой значение временной метки Excel для этой даты / времени ... Я подозреваю, что это ваш trim (), который переводит его в строку. Фактическое значение - количество дней с 1/1900 (или 1/1/1904 в зависимости от календаря, который используется в электронной таблице).

Вызов getFormattedValue () или getCalculatedValue () вместо getValue () должен возвращать дату, отформатированную как удобочитаемую строку в соответствии с маской номерной формы ячейки.

В качестве альтернативы, решение Сергея проверяет, имеет ли ячейка маска даты / времени и отображает соответствующий вспомогательный метод для преобразования этой временной метки Excel в временную метку unix, а затем использует стандартную функцию даты PHP для ее форматирования как читаемую человеком в соответствии со значением $ формат. Существует аналогичный вспомогательный метод PHPExcel_Shared_Date :: ExcelToPHPObject (), который преобразует сериализованную временную метку Excel в объект PHP DateTime


Answer #3

Попробуйте использовать

$cell = $excel->getActiveSheet()->getCell('B' . $i);
$InvDate= $cell->getValue();
if(PHPExcel_Shared_Date::isDateTime($cell)) {
     $InvDate = date($format, PHPExcel_Shared_Date::ExcelToPHP($InvDate)); 
}

PS

@DiegoDD: Следует указать, что формат $ - желаемый формат даты. например:

 $InvDate = date($format = "Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($InvDate)); 




phpexcel