Хобрук: Ваш путь к мастерству в программировании

Дата PHPExcel без тире, косой черты или чего-то еще

Я использую шаблон excel с форматом ячейки в столбце L как «пользовательский» -> ddmmyyyy
На странице php я вызываю объект PHPExcel и заполняю следующим образом:

$objPHPExcel->setActiveSheetIndex(0)
->setCellValueExplicit('L'.$i, $birthdate, PHPExcel_Cell_DataType::TYPE_STRING);

(в цикле, но это не имеет значения для проблемы).
Значение $birthdate содержит даты с дефисом. И это именно то, что я хочу, чтобы это было... почти...=>
Когда ячейки были записаны и я открываю файл excel, я вижу, что все даты отображаются в этом формате
: dd- мм-гггг Однако формат ячейки каждой ячейки в столбце L в этом файле
по-прежнему является «настраиваемым» -> ддммгггг Поэтому я ожидаю, что ячейки будут отображаться как ддммгггг...

Почему он все еще показывает тире, хотя формат ячейки ddmmyyyy?

Кроме того... когда я щелкаю за датой на панели значений (это поле за fx) и
затем нажимаю ENTER, то внезапно ячейка отображает дату как ддммгггг...
Почему бы и нет? при открытии файла? И как это решить?

18.08.2015

Ответы:


1

Потому что вы сохраняете дату не как штамп Excel DateTime, а как строку.

Чтобы хранить даты в MS Excel, вам необходимо сохранить сериализованное значение метки времени, как показано в примерах.

Как показано на /Examples/02types.php

$dateTimeNow = time();
$objPHPExcel->getActiveSheet()
    ->setCellValue('C9', PHPExcel_Shared_Date::PHPToExcel($dateTimeNow));

PHPExcel_Shared_Date::PHPToExcel() преобразует временную метку unix, объект PHP DateTime или большинство значений даты в строковом формате, которые strtotime() может обрабатывать, в сериализованную временную метку MS Excel.

ИЗМЕНИТЬ

Возможно, вам придется выполнить некоторые манипуляции с вашим форматом ddmmyyyy в формате, который можно легко преобразовать в объект DateTime:

$dateTimeValue = DateTime::createFromFormat('dMY', '18082015', new DateTimeZone('UTC'));
$objPHPExcel->getActiveSheet()
    ->setCellValue('C9', PHPExcel_Shared_Date::PHPToExcel($dateTimeValue));
18.08.2015
  • Мне больше нечего сказать Марк.... отлично!!! Вы только что спасли мой день! :-) Спасибо! 19.08.2015

  • 2

    Случайно нашел решение... поставил дату на 00:00:00 UTC =>

    $date = DateTime::createFromFormat('d-m-Y', $birthdate);
    $birthdate  = $date->format('d-m-Y')." 00:00:00";
    date_default_timezone_set("UTC");
    $timestamp = strtotime($birthdate);
    $dateValue = $timestamp;
    
        $objPHPExcel->getActiveSheet(0)
            ->setCellValue('L'.$i, PHPExcel_Shared_Date::PHPToExcel($dateValue));
    
    19.08.2015
    Новые материалы

    Понимание СТРУКТУРЫ ДАННЫХ И АЛГОРИТМА.
    Что такое структуры данных и алгоритмы? Термин «структура данных» используется для описания того, как данные хранятся, а алгоритм используется для описания того, как данные сжимаются. И данные, и..

    Как интегрировать модель машинного обучения на ios с помощью CoreMl
    С выпуском новых функций, таких как CoreML, которые упростили преобразование модели машинного обучения в модель coreML. Доступная модель машинного обучения, которую можно преобразовать в модель..

    Создание успешной организации по науке о данных
    "Рабочие часы" Создание успешной организации по науке о данных Как создать эффективную группу по анализу данных! Введение Это обзорная статья о том, как создать эффективную группу по..

    Технологии и проблемы будущей работы
    Изучение преимуществ и недостатков технологий в образовании В быстро меняющемся мире технологии являются решающим фактором в формировании будущего работы. Многие отрасли уже были..

    Игорь Минар из Google приедет на #ReactiveConf2017
    Мы рады сообщить еще одну замечательную новость: один из самых востребованных спикеров приезжает в Братиславу на ReactiveConf 2017 ! Возможно, нет двух других кланов разработчиков с более..

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

    Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
    Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..