Использование PHPExcel для импорта содержимого файла excel в базу данных MySQL (проблемы с форматом)

Я импортирую содержимое файла Excel 2007 в базу данных MySQL, но поле даты в электронной таблице имеет пользовательский формат даты (дд-ммм-гг). Я не могу изменить это на текст, потому что клиент будет загружать его, поэтому это невозможно. Когда я импортирую содержимое файла, он вставляет дату в виде числа, например. 40978 вместо 12 января 2009 года. Я знаю, что изменение формата таблицы базы данных поля не будет иметь никакого эффекта, поскольку его формат превосходит форматирование, но кто-нибудь знает способ обойти это? Без изменения формата таблицы?


person pam    schedule 23.03.2011    source источник


Ответы (2)


Используйте встроенные в PHPExcel методы преобразования, такие как PHPExcel_Shared_Date::ExcelToPHP() или PHPExcel_Shared_Date::ExcelToPHPObject(), чтобы преобразовать значения даты в отметку времени PHP/Unix или объект PHP DateTime соответственно.

Затем вы можете отформатировать это в строку формата гггг-мм-дд, используя соответствующие функции PHP date() или $DateTimeObject->format().

ИЗМЕНИТЬ

$excelDateValue = 40978;

$PHPTimeStamp = PHPExcel_Shared_Date::ExcelToPHP($excelDateValue);
echo $PHPTimeStamp,'<br />';
echo date('Y-m-d',$PHPTimeStamp),'<br />';

or

$excelDateValue = 40978;

$PHPDateTimeObject = PHPExcel_Shared_Date::ExcelToPHPObject($excelDateValue);
echo $PHPDateTimeObject->format('Y-m-d'),'<br />';

Между прочим, отметка даты Excel 40978 — это 10 марта 2012 года (на основе календаря Excel Windows 1900) или 11 марта 2016 года (на основе календаря Excel Mac 1904). 12-янв-09 будет отметкой времени Excel 39825 (на основе календаря Excel Windows 1900).

person Mark Baker    schedule 23.03.2011
comment
echo $PHPDateTimeObject-›format('Y-m-d'),'‹br /›'; Вот чего мне не хватало :-) @Mark Baker - person pam; 24.03.2011

Используйте код, который преобразует дату строки в дату в формате mysql. Что-то типа:

$ma=array("jan"=>"-01-","feb"=>"-02-","mar"=>"-03-", etc );
$month=$ma[strtolower(substr($exceldate,3,3))];
$newdate="20".substr($exceldate,7,2).$month.substr($exceldate,0,2);
person mlewis54    schedule 23.03.2011
comment
он преобразовал все даты в 2040? @mlewis54 - person pam; 23.03.2011
comment
я думаю, это потому, что 40978 — это число, которое возвращается до того, как оно будет импортировано в mysql, поэтому мне нужно работать с этим числом. - person pam; 23.03.2011