D
D
Denis2019-08-31 10:00:14
PHP
Denis, 2019-08-31 10:00:14

How to change the date format when exporting to Excel?

A hackneyed question to the point of stupidity, but my brain is already boiling so much that I can’t. I'm new to php so please don't be too harsh.
I exported the database to Excel with mailing. The code works, everything seems to be fine, but not quite. (Googling, I can not figure out what and where).
Please help, don't joke, we all once studied and sat on programming tasks for a long time, although they seemed simple.
So, to the point:
the code is working, but at the output, the date in the American format is displayed in the field (it is already written in the database, from where I take the data). How to translate it into human format?
Thanks in advance to everyone who responded, not kicked. All the best, love the beaver :-)
Code:

// Create new PHPExcel object
echo date('H:i:s') , " Создан файл Excel" , EOL;
$objPHPExcel = new PHPExcel();

// Set document properties
echo date('H:i:s') , " Установка свойств документа" , EOL;
$objPHPExcel->getProperties()->setCreator("")
               ->setLastModifiedBy("")
               ->setTitle("")
               ->setSubject("")
               ->setDescription("")
               ->setKeywords("")
               ->setCategory("");


// Add some data
echo date('H:i:s') , " Добавление данных" , EOL;
$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1', 'Проект')
            ->setCellValue('B1', 'Код')
            ->setCellValue('C1', 'Тема')
            ->setCellValue('D1', 'Статус')
            ->setCellValue('E1', 'Исполнитель')
            ->setCellValue('F1', 'Автор')
            ->setCellValue('G1', 'Создано')
            ->setCellValue('H1', 'Описание')
            ->setCellValue('I1', 'Дата совещания')
            ->setCellValue('J1', 'Срок исполнения');

$count = 1;
echo "Data:";
$get_jira = $DBH->query("SELECT * FROM БД WHERE OTKRITA = 1 AND Proect = 'ТАБЛИЦА'");
//while($get_jira_db = $get_jira->fetch()) {  
    
while($get_jira_db = $get_jira->fetch(PDO::FETCH_ASSOC)) {    
      $count++;
      $A = $get_jira_db['Proect'];
      $B = $get_jira_db['CodZadachi'];
      $C = $get_jira_db['Tema'];
      $D = $get_jira_db['Status'];
      $E = $get_jira_db['Ispolnitel'];
      $F = $get_jira_db['Avtor'];
      $G = $get_jira_db['DataSozdania'];
      $H = $get_jira_db['Opisanie'];
      $I = $get_jira_db['DataSoveschania'];
      $J = $get_jira_db['SrokIspolnenia'];
      //Устанавливаем кодировку столбцов, потому что без этого ни хрена не грузит в столбцы русские буквы.
      $C = iconv( "cp1251","UTF-8", $C);
      $D = iconv( "cp1251","UTF-8", $D);
      $E = iconv( "cp1251","UTF-8", $E);
      $F = iconv( "cp1251","UTF-8", $F);
      //Устанавливаем автоматическую ширину столбцов непосредственно в конечном файле Excel, который получит пользователь на свой e-mail.
      $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);
      $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
      $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
      $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setAutoSize(true);
      $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setAutoSize(true);
      $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setAutoSize(true);
      $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setAutoSize(true);
      $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setAutoSize(true);
      $objPHPExcel->getActiveSheet()->getColumnDimension('I')->setAutoSize(true);
      $objPHPExcel->getActiveSheet()->getColumnDimension('J')->setAutoSize(true);

$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A'.$count, $A)
            ->setCellValue('B'.$count, $B)
            ->setCellValue('C'.$count, $C)
            ->setCellValue('D'.$count, $D)
            ->setCellValue('E'.$count, $E)
            ->setCellValue('F'.$count, $F)
            ->setCellValue('G'.$count, $G)
            ->setCellValue('H'.$count, $H)
            ->setCellValue('I'.$count, $I)
            ->setCellValue('J'.$count, $J);
}
echo "--data end--";
// Rename worksheet
echo date('H:i:s') , " Присвоение имени" , EOL;
$objPHPExcel->getActiveSheet()->setTitle('Выгрузка');


// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);

// Save Excel 95 file
echo date('H:i:s') , " Запись в формат Excel" , EOL;
$callStartTime = microtime(true);

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save(str_replace('.php', '.xls', __FILE__));
$callEndTime = microtime(true);
$callTime = $callEndTime - $callStartTime;

echo date('H:i:s') , " Файл записан как: " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
echo 'Создано за время ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
// Echo memory usage
echo date('H:i:s') , ' Текущее использование памяти : ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;


// Echo memory peak usage
echo date('H:i:s') , " Пиковое использование памяти: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;

// Echo done
echo date('H:i:s') , " Файл записан" , EOL;
echo 'Файл сохранен по пути: ' , getcwd() , EOL;


// пример использования
$file = "excel.xls"; // файл
$mailTo1 = "ПОЧТА 1"; // кому
$mailTo2 = "ПОЧТА 2"; // кому
$from = "ЯЩИК С КОТОРОГО ШЛЮ"; // от кого
$subject = "Рассылка"; // тема письма
$message = "Ваша рассылка"; // текст письма

$r1 = sendMailAttachment($mailTo1, $from, $subject, $message, $file); // отправка письма c вложением
$r2 = sendMailAttachment($mailTo2, $from, $subject, $message, $file); // отправка письма c вложением

echo ($r1)?'Письмо отправлено ':'Ошибка. Письмо не отправлено!<p>';
echo ($r2)?'Письмо отправлено ':'Ошибка. Письмо не отправлено!';
//$r = sendMailAttachment($mailTo, $from, $subject, $message); // отправка письма без вложения
//echo ($r)?'Письмо отправлено':'Ошибка. Письмо не отправлено!';
 
/**
* Отправка письма с вложением
* @param string $mailTo
* @param string $from
* @param string $subject
* @param string $message
* @param string|bool $file - не обязательный параметр, путь до файла
* 
* @return bool - результат отправки
*/
 
function sendMailAttachment($mailTo, $from, $subject, $message, $file = false){
    $separator = "---"; // разделитель в письме
    // Заголовки для письма
    $headers = "MIME-Version: 1.0\r\n";
    $headers .= "From: $from\nReply-To: $from\n"; // задаем от кого письмо
    $headers .= "Content-Type: multipart/mixed; boundary=\"$separator\""; // в заголовке указываем разделитель
    $headers .= "Content-type: text/html; charset=utf-8'\n";
    // если письмо с вложением
    if($file){
        $bodyMail = "--$separator\n"; // начало тела письма, выводим разделитель
        $bodyMail .= "Content-type: text/html; charset=utf-8\n"; // кодировка письма
        $bodyMail .= "Content-Transfer-Encoding: quoted-printable"; // задаем конвертацию письма
        $bodyMail .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode(basename($file))."?=\n\n"; // задаем название файла
        $bodyMail .= $message."\n"; // добавляем текст письма
        $bodyMail .= "--$separator\n";
        $fileRead = fopen($file, "r"); // открываем файл
        $contentFile = fread($fileRead, filesize($file)); // считываем его до конца
        fclose($fileRead); // закрываем файл
        $bodyMail .= "Content-Type: application/octet-stream; name==?utf-8?B?".base64_encode(basename($file))."?=\n"; 
        $bodyMail .= "Content-Transfer-Encoding: base64\n"; // кодировка файла
        $bodyMail .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode(basename($file))."?=\n\n";
        $bodyMail .= chunk_split(base64_encode($contentFile))."\n"; // кодируем и прикрепляем файл
        $bodyMail .= "--".$separator ."--\n";
    // письмо без вложения
    }else{
        $bodyMail = $message;
    }
    $result = mail($mailTo, $subject, $bodyMail, $headers); // отправка письма
    return $result;
}

The time and date are displayed now from the database like this:
Jul 4 2019 12:00AM
but I would like: July 4 12:00 2019 (it is possible without a year). So to say, ennoble

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
Sergey c0re, 2019-08-31
@s-developer

One of the options is to convert the date to the required format in the query:
see MySQL date and time formatting
functions MySQL CASE function
Example of string-value concatenation (addition)...

SELECT
  Proect,
  CodZadachi,
  Tema,
  Status,
  Ispolnitel,
  Avtor,
  CONCAT(
    CASE DATE_FORMAT(DataSozdania,'%m')
      WHEN '01' THEN 'Январь'
      WHEN '02' THEN 'Февраль'
      WHEN '03' THEN 'Март'
      WHEN '04' THEN 'Апрель'
      WHEN '05' THEN 'Май'
      WHEN '06' THEN 'Июнь'
      WHEN '07' THEN 'Июль'
      WHEN '08' THEN 'Август'
      WHEN '09' THEN 'Сентябрь'
      WHEN '10' THEN 'Октябрь'
      WHEN '11' THEN 'Ноябрь'
      WHEN '12' THEN 'Декабрь'
    END,
    DATE_FORMAT(DataSozdania,' %e %H:%i %Y')
  ) AS DataSozdania,
  Opisanie,
  DataSoveschania,
  SrokIspolnenia,
FROM БД WHERE OTKRITA = 1 AND Proect = 'ТАБЛИЦА'

You can use regular expressions in PHP to replace all English month names with Russian ones, see Functions for working with regular expressions (Perl...
But in this form for Excel it will be a regular string, the date is not recognized. You
can format the date in the query (see above ) to the format dd.mm.yyyy hh:mi , Excel understands this format,
and then apply the necessary date formatting to the cell, the format will be: MMMM DD HH:MM YYYY
but the name of the month is declined (at least in LibreOffice) and looks like not really,
see for example: PHPEXCEL: HOW TO SET THE DATE FORMAT FOR A CELL

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question