Intereting Posts

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

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

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

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

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

 $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 = "Ymd", PHPExcel_Shared_Date::ExcelToPHP($InvDate)); 

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

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

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

В новой версии библиотеки 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); }