Я пытаюсь получить Date from excel с помощью PHPExcel. Но я не получаю дату, я получаю строковое значение, которое не является секундой с 1970 года.
Код, который я пробовал,
$InvDate=trim($excel->getActiveSheet()->getCell('B' . $i)->getValue());
Я пытаюсь получить 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));
}
P.S.
@DiegoDD: Следует указать, что формат $- желаемый формат даты. например:.
$InvDate = date($format = "Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($InvDate));
Для даты getValue() должен возвращать float, который является значением времени в Сериализованной Excel для этой даты/времени... Я подозреваю, что ваш trim() отправляет его в строку. Фактическое значение - количество дней с 1/1900 (или 1/1/1904 в зависимости от календаря, который используется в электронной таблице).
Вызов getFormattedValue() или getCalculatedValue() вместо getValue() должен вернуть дату, отформатированную как удобочитаемую строку в соответствии с маской номерной формы ячейки.
В качестве альтернативы, решение Сергея проверяет, имеет ли ячейка маска даты/времени numberformatmask и вызывает соответствующий вспомогательный метод для преобразования этой временной метки 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);
}