Преобразование даты Excel с использованием PHP Excel

Я читаю дату от excel, которая в этом формате 12/5/2012 день/месяц/год  используя этот код для чтения. используя 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

Ответ 1

Пожалуйста, используйте эту формулу, чтобы изменить дату 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);

Ответ 2

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

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

Ответ 3

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

<?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');

Ответ 4

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

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