Я импортирую содержимое файла Excel 2007 в базу данных MySQL, но поле даты в электронной таблице имеет пользовательский формат даты (дд-ммм-гг). Я не могу изменить это на текст, потому что клиент будет загружать его, поэтому это невозможно. Когда я импортирую содержимое файла, он вставляет дату в виде числа, например. 40978 вместо 12 января 2009 года. Я знаю, что изменение формата таблицы базы данных поля не будет иметь никакого эффекта, поскольку его формат превосходит форматирование, но кто-нибудь знает способ обойти это? Без изменения формата таблицы?
Использование PHPExcel для импорта содержимого файла excel в базу данных MySQL (проблемы с форматом)
Ответы (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
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
он преобразовал все даты в 2040? @mlewis54
- person pam; 23.03.2011
я думаю, это потому, что 40978 — это число, которое возвращается до того, как оно будет импортировано в mysql, поэтому мне нужно работать с этим числом.
- person pam; 23.03.2011