Intereting Posts
cURL не может использовать клиентский сертификат, на локальном сервере Я не могу найти dompdf_config.inc.php или dompdf_config.custom.inc.php для установки «DOMPDF_UNICODE_ENABLED» true Проверка URL-адреса с протоколом или без него читать содержимое внешней веб-страницы и получать конкретные элементы Как получить часовой пояс через IP-адрес в PHP Оператор mysqli execute (), правильный путь Как вы получаете использование центрального процессора и использование ОЗУ с помощью php? PHP: Как преобразовать временную метку сервера в часовой пояс пользователя? Удалить дубликаты определенных символов из строки Как отображать все изображения, хранящиеся в базе данных Журнальный журнал запросов Laravel Eloquent Удаление # из url в Angularjs при использовании .run в маршрутах Строка PHP CSV для массива TCPDF не отображает китайский на Linux-клиенте CryptoJS шифрует AES с парольной фразой, но для расшифровки PHP требуется ключ

PHPExcel: как установить формат даты для ячейки

Мне нужно сохранить дату в файл Excel, она должна выводиться в формате «dd / mm / yyyy» (или локальный формат даты пользователя) и обрабатываться как дата, чтобы их можно было правильно отсортировать ,

Вот код:

<?php include_once("../PHPExcel/Classes/PHPExcel.php"); date_default_timezone_set('Europe/London'); $objPHPExcel = new PHPExcel(); $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip; PHPExcel_Settings::setCacheStorageMethod($cacheMethod); $objPHPExcel = new PHPExcel(); $sheet = $objPHPExcel->getActiveSheet(); PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT); //I didn't find dd/mm/yyyy format, so I used yyyy-mm-dd $sheet->setCellValueByColumnAndRow(0, 1, "2014-10-16"); $sheet->getStyleByColumnAndRow(0, 1) ->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2 ); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save("test.xlsx"); 

Он создает файл, но вместо моего локального формата даты я вижу: «2014-10-16», а формат ячейки – «Все форматы» -> «yyyy-mm-dd». Я хотел, чтобы он разбирался и выводился в моем локальном формате даты.

Я просмотрел исходный код PHPExcel/Classes/PHPExcel/Style/NumberFormat.php и нашел много форматов даты:

 const FORMAT_DATE_YYYYMMDD2 = 'yyyy-mm-dd'; const FORMAT_DATE_YYYYMMDD = 'yy-mm-dd'; const FORMAT_DATE_DDMMYYYY = 'dd/mm/yy'; const FORMAT_DATE_DMYSLASH = 'd/m/y'; const FORMAT_DATE_DMYMINUS = 'dm-y'; ... 

Но я не уверен, что использовать. Как я могу достичь желаемой цели?

 $sheet->setCellValueByColumnAndRow(0, 1, "2014-10-16"); 

Устанавливает строковое значение в ячейке, а не дату. Просто потому, что вы интерпретируете это как дату, не означает, что компьютерные программы автоматически интерпретируют его как дату.

Посмотрите пример даты в документации и примерах PHPExcel, и вы увидите, что вам нужно установить значение ячейки в сериализованную временную метку MS Excel (значение с плавающей точкой числа дней с 1 января 1900 года). Вы можете использовать функции PHPExcel, такие как PHPExcel_Shared_Date::PHPToExcel() для преобразования человеческих дат / объектов PHP DateTime / временных меток Unix в MS Excel. Сериализованные временные метки.

 $sheet->setCellValueByColumnAndRow(0, 1, PHPExcel_Shared_Date::PHPToExcel( '2014-10-16' )); 

После того как вы сохранили это значение как временную метку, вы можете применить любую маску формата даты, которую вы хотите к этой ячейке, чтобы получить нужное форматирование

Этот код генерирует 4 ячейки в формате даты.

 <?php include_once("../PHPExcel/Classes/PHPExcel.php"); date_default_timezone_set('Europe/London'); $objPHPExcel = new PHPExcel(); $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip; PHPExcel_Settings::setCacheStorageMethod($cacheMethod); $objPHPExcel = new PHPExcel(); $sheet = $objPHPExcel->getActiveSheet(); PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT); $format = 'dd/mm/yyyy'; for ($i = 1; $i < 5; ++$i) { $date = new DateTime('2016-12-0'.$i); $sheet->setCellValueByColumnAndRow(0, $i, PHPExcel_Shared_Date::PHPToExcel( $date )); $sheet->getStyleByColumnAndRow(0, $i) ->getNumberFormat()->setFormatCode($format); } $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save("test.xlsx");