Формат даты PHPExcel

Я получаю вывод с сервера MS SQL в формате '2012-08-09 00:00:00' (без кавычек).

Однако, когда я пишу его в файл excel, я не могу записать его в формате даты, чтобы иметь форматирование dd mmm yyyy на excel.

В результате я попытался записать в формате = date (2012,08,09) как формулу для соответствующих ячеек.

Но я не хочу выводить его как формулу, а значение '09 августа 2012 года 'с целостностью типа данных. Как мне это сделать? Или есть более простой метод?

Я прочитал документацию, но мне было непонятно, подумал, что попрошу уточнить.

С уважением.


Извините, что недостаточно детально.

Я использую библиотеку PHPExcel.

Из моего массива sql я использую следующее:

                    $t_year     = substr($xls_column_datas["colname"],0,4);
                    $t_month    = substr($xls_column_datas["colname"],5,2);
                    $t_day      = substr($xls_column_datas["colname"],8,2);
                    $t_format   = $t_year . "," . $t_month . "," . $t_day ;
                    $t_format   = '=date('.$t_format.')';


                $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($data_column_num, $data_row_num, $t_format );
                $objPHPExcel->getActiveSheet()->getStyleByColumnAndRow($data_column_num, $data_row_num)->getNumberFormat()->setFormatCode('[$-C09]d mmm yyyy;@');

в моем excel-выходе, он показывает столбец A2, например. = DATE (2012,8,9)

вместо того, чтобы отображаться как формула, я хочу, чтобы excel распознал "2012-08-09 00:00:00" - это время и формат для dd mmm yyyy.

Это ясно? К сожалению.

Ответ 1

Является ли ваша проблема в получении даты из MS SQL в качестве даты/времени или установки даты Excel?

Существует целый раздел документации PHPExcel, в которой объясняется использование вспомогательных методов PHPExcel_Shared_Date::PHPToExcel($PHPDate) и PHPExcel_Shared_Date::FormattedPHPToExcel($year, $month, $day, $hours=0, $minutes=0, $seconds=0) для преобразования дат PHP в значение штампа даты в формате Excel, которое вы устанавливаете как значение ячейки, а затем применяете маску формата номера одной из масок даты, например PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2, в эту ячейку

Вместо

$t_year     = substr($xls_column_datas["colname"],0,4);    
$t_month    = substr($xls_column_datas["colname"],5,2);    
$t_day      = substr($xls_column_datas["colname"],8,2);
$t_format   = '=date('.$t_format.')';
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($data_column_num, $data_row_num, $t_format );
$objPHPExcel->getActiveSheet()->getStyleByColumnAndRow($data_column_num, $data_row_num)->getNumberFormat()->setFormatCode('[$-C09]d mmm yyyy;@');

попробуйте установить

$t_year   = substr($xls_column_datas["colname"],0,4);
$t_month  = substr($xls_column_datas["colname"],4,2);  // Fixed problems with offsets
$t_day    = substr($xls_column_datas["colname"],6,2);
$t_date   = PHPExcel_Shared_Date::FormattedPHPToExcel($t_year, $t_month, $t_day);
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(
    $data_column_num, $data_row_num, $t_date 
);
$objPHPExcel->getActiveSheet()
    ->getStyleByColumnAndRow($data_column_num, $data_row_num)
    ->getNumberFormat()->setFormatCode(
        PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX14
    );

Ответ 2

$date = PHPExcel_Style_NumberFormat:: toFormattedString ($ data, "M/D/YYYY" );

Ответ 3

Хотя неясно, что спрашивают, если вы ищете преобразование даты

 // convert old date string to YYYYmmdd format
    $date = date('d M Y', strtotime($old_date));

это приведет к дате выхода в формате 09 августа 2012 года.

Ответ 4

Почему бы не позволить серверу форматировать для вас? Используйте этот запрос для форматирования даты

SELECT convert(varchar(15), getdate(), 106) 

Это приведет к 11 Sep 2012

SQL SERVER: Формат даты