2015-03-20 5 views
0

Когда я использую PHPExcel getFormattedValue() в строке/столбце, которая в LibreOffice Calc отображается как 02/19/2015 23:59:40, я получаю 42067.458524537 назад. Как это преобразовать в 02/19/2015 23:59:40?PHPExcel возвращает странный формат даты

Моего PHP код выглядит следующим образом:

<?php 
include('/path/to/PHPExcel.php'); 

$filePath = 'filename.xlsx'; 

$inputFileType = PHPExcel_IOFactory::identify($filePath); 
$objReader = PHPExcel_IOFactory::createReader($inputFileType); 

$excel = $objReader->load($filePath); 
$worksheet = $excel->getSheet(); 

echo $worksheet->getCellByColumnAndRow(3, 4)->getFormattedValue(); 
+1

Вы видели: http://stackoverflow.com/questions/11172644/php-convert-the-full-excel-date-serial-format-to-unix-timestamp? –

+0

У меня нет - это очень полезная ссылка - спасибо! – neubert

ответ

1

MS Excel хранит даты как упорядоченное значение, действительное число, которое является подсчетом количества дней, прошедшим с базовым уровнем либо 1 января 1900 или 1 декабря 1904, в зависимости от того, была ли электронная таблица создана с использованием календаря Windows 1900 или календаря Mac 1904.

Сериализованное значение 42067.458524537 соответствует дате 4 марта 2015 года в 11:00:17 (с ОС Windows 1900 Календарем)

Если вы использовали getFormattedValue() метод PHPExcel, а затем он должен преобразовать сериализированное значение к форматированной строке даты/времени на основе маски формата номера, примененной к этой ячейке .... предполагая, что вы не устанавливали loadDataOnly при загрузке файла электронной таблицы.

Если вам нужно преобразовать необработанное сериализованное значение MS Excel в временную метку unix или в объект PHP DateTime, то вы можете использовать методыили PHPExcel_Shared_Date::ExcelToPHPObject() соответственно; затем используйте собственный PHP date() функции DateTime::format(), чтобы отформатировать его, как вы хотите.

Смежные вопросы