Поле даты PHPExcel не соответствует исходной электронной таблице - PullRequest
2 голосов
/ 14 апреля 2011

Это то, что находится в моей электронной таблице:

12/04/2011  8:56:17 p.m. (xls dateserial = 40645.87242)

Это мой код, который я использую для извлечения даты и преобразования строки даты в PHP:

$txn_date_xls = $sheet->getCell("H$row")->getValue();               
echo "Txn Date (original): $txn_date_xls<br />";

$txn_date = PHPExcel_Shared_Date::ExcelToPHP($txn_date_xls);
echo "Txn Date: ".date('Y-m-d H:i:s', $txn_date)."<br />";

Этовывод моего сценария:

Txn Date (original): 40644.55783637732
Txn Date: 2011-04-11 13:23:17

Серийный номер не соответствует исходной электронной таблице.Итак, я пытаюсь определить, является ли это ошибкой в ​​PHPExcel или я пропустил настройку или что-то, что мне нужно сделать перед извлечением dateserial из ячейки.Возможно, проблема с часовым поясом?

Извините, я еще не очень знаком с библиотекой PHPExcel.

Ответы [ 2 ]

10 голосов
/ 14 апреля 2011

Я не уверен в этом, но ...

Функция date () в PHP зависит от настроек часового пояса сервера.

PHPExcel_Shared_Date:: ExcelToPHP () предполагает, что указана дата по Гринвичу и возвращает время Unix соответственно.

Поэтому попробуйте установить часовой пояс GMT / UTC для PHP в начале скрипта (используя date_default_timezone_set () )

date_default_timezone_set('UTC');

или как этот (используя ini_set () )

ini_set('date.timezone', 'UTC');

Также попробуйте использовать gmdate () вместо date () , в противном случае вы можете получить смещение на 1 день .

Полезная ссылка:

2 голосов
/ 30 января 2015

Определить

date_default_timezone_set(YOUR_TIME_ZONE);

Изменить эту строку:

date('Y-m-d H:i:s', $txn_date)

на:

 PHPExcel_Style_NumberFormat::toFormattedString($txn_date_xls, 'Y-m-d H:i:s')
...