Это то, что находится в моей таблице:
12/04/2011 8:56:17 pm (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('Ymd H:i:s', $txn_date)."<br />";
Это результат моего скрипта:
Txn Date (original): 40644.55783637732 Txn Date: 2011-04-11 13:23:17
Серийный номер даты не соответствует исходной электронной таблице. Итак, я пытаюсь определить, является ли это ошибкой с PHPExcel или я пропустил настройку или что-то еще, что мне нужно сделать, прежде чем извлекать датировку из ячейки. Возможно, проблема с часовым поясом?
К сожалению, я еще не очень хорошо знаком с библиотекой PHPExcel.
Я не уверен в этом, но …
Дата функции () в PHP зависит от настройки часового пояса сервера.
PHPExcel_Shared_Date :: ExcelToPHP () предполагает, что указанная дата – GMT и соответственно возвращает время Unix.
Поэтому постарайтесь установить GMT / UTC для часового пояса PHP в начале сценария (используя date_default_timezone_set () )
date_default_timezone_set('UTC');
или как это (с помощью ini_set () )
ini_set('date.timezone', 'UTC');
Кроме того, попробуйте использовать gmdate () вместо date () , иначе вы можете получить смещение за 1 день .
Полезная ссылка:
определять
date_default_timezone_set(YOUR_TIME_ZONE);
Измените эту строку:
date('Ymd H:i:s', $txn_date)
чтобы:
PHPExcel_Style_NumberFormat::toFormattedString($txn_date_xls, 'Ymd H:i:s')