2012-06-20 2 views
18

Я читаю дату от excel, которая в этом формате 12/5/2012 день/месяц/год , используя этот код для чтения. с помощью PHP EXCELПреобразование даты Excel с использованием PHP Excel

PHPExcel_Style_NumberFormat::toFormattedString($value['A'],'YYYY-MM-DD'); 

его работы как шарм преобразования выше даты '12/5/2012' до „2012-12-05“

теперь проблема, если дата позволяет говорит 18/5/2012 или вы можете сказать, если я установить день больше 12 это дает мне эту дату 18/5/2012 в этом формате 18/5/2012 после форматирования

я попробовал эту вещь, а

 $temp = strtotime( PHPExcel_Style_NumberFormat::toFormattedString($value['A'],'YYYY-MM-DD'); 
     $actualdate = date('Y-m-d',$temp) ; 

Это также конвертирует дату «12/5/2012 ', но в этом случае 18/5/2012 он дает результат как 1970-01-01

+0

пример, который вы даете, по-прежнему не правильно конвертируется - 12/5/2012, когда конвертировано из Великобритании в формат ISO, должно быть возвращено 2012-05-12 – SeanC

+0

да, youre right havent заметил, что ..... чтобы попасть в этот формат 2012- 05-12 Я должен сделать строку формат, подобный этому YYYY-DD-MM –

+1

Является ли значение Excel DateTimestamp или это строка? Если первое, почему бы не использовать методы преобразования PHPExcel_Shared_Date, такие как ExcelToPHP() или ExcelToPHPObject()? Если последнее, то вы не должны использовать toFormattedString() –

ответ

0

Кажется, что ваша переменная является строкой или ожидает дату в формате США.
использование «DateTime :: createFromFormat» бросить дату в формате даты фактического

$date = DateTime::createFromFormat('d/m/y', $value['A']); 
echo $date->format('Y-m-d'); 
+0

спасибо плохой попытке и дайте знать u –

+0

Неустранимая ошибка: вызывается в формате функции-члена() на не-объекте, он дает мне эту ошибку, я использую php 5.4.3 –

+1

Если эхо не работает, то это небольшая проблема - 'PHPExcel_Style_NumberFormat :: toFormattedString (DateTime :: createFromFormat ('d/m/y', $ value ['A']), 'YYYY-MM-DD'); ' – SeanC

50

Пожалуйста, используйте эту формулу для изменения от даты Excel на сегодняшний день Unix, то вы можете использовать «gmdate», чтобы получить реальную дату в PHP:

UNIX_DATE = (EXCEL_DATE - 25569) * 86400 

и конвертировать с даты Unix на сегодняшний день Excel, использовать эту формулу:

EXCEL_DATE = 25569 + (UNIX_DATE/86400) 

После ввода этой формулы в переменную , Вы можете получить реальную дату в PHP с помощью этого примера:

$UNIX_DATE = ($EXCEL_DATE - 25569) * 86400; 
echo gmdate("d-m-Y H:i:s", $UNIX_DATE); 
+0

Perfect. Но не могли бы вы объяснить значение 25569 и 86400? – idok

+2

Я могу. 86400 - это количество секунд в день = 24 * 60 * 60. 25569 - это количество дней с 1 января 1900 года по 1 января 1970 года. Дата базы данных Excel - 1 января 1900 года, а Unix - 1 января 1970 года. Значения даты UNIX находятся в секундах с 1 января 1970 года (полночь 31 декабря 1969 года). Поэтому, чтобы конвертировать из excel, вы должны вычесть количество дней, а затем конвертировать в секунды. – TJChambers

+1

Можем ли мы использовать функцию build-int toFormattedString?echo PHPExcel_Style_NumberFormat :: toFormattedString (42033, «YYYY-MM-DD»); выйдет 2015-01-29 –

2

Простой способ ...

<?php 
    $date = date_create('30-12-1899'); 

    date_add($date, date_interval_create_from_date_string("{$value['A']} days")); 
    echo date_format($date, 'Y-m-d'); 
16

При использовании PHPExcel вы можете использовать встроенную функцию:

$excelDate = $cell->getValue(); // gives you a number like 44444, which is days since 1900 
$stringDate = \PHPExcel_Style_NumberFormat::toFormattedString($excelDate, 'YYYY-MM-DD'); 
+0

Лучший ответ до сих пор ... Работает отлично и очень безопасно и простое использование ... Спасибо! –

+0

Добро пожаловать! – caponica

+0

очень полезно, спасибо! – adrianp

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