Подтвердить что ты не робот

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

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

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

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

Ответ 1

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

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

P.S.

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

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

Ответ 2

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

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

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

Ответ 3

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