web-dev-qa-db-fra.com

Conversion de date Excel avec PHP Exceller

je lis la date d'Excel qui est dans ce format 12/5/2012 jour/mois/année en utilisant ce code pour lire. en utilisant PHP Excel

   PHPExcel_Style_NumberFormat::toFormattedString($value['A'],'YYYY-MM-DD' );

cela fonctionne comme un charme convertissant la date ci-dessus '12/5/2012 'à' 2012-12-05 ' 

maintenant le problème est que si la date est laissée dit 18/5/2012 ou vous pouvez dire que si je fixe un jour supérieur à 12 cela me donne cette date 18/5/2012 dans ce format 18/5/2012 après le formatage 

j'ai aussi essayé cette chose 

      $temp  = strtotime(  PHPExcel_Style_NumberFormat::toFormattedString($value['A'],'YYYY-MM-DD' );
      $actualdate = date('Y-m-d',$temp) ;

Cela convertit également la date '12/5/2012 'correcte, mais dans ce cas, le 18/5/2012, le résultat est le 1970-01-01.

21
Abdul basit

Veuillez utiliser cette formule pour passer de la date Excel à la date Unix. Vous pouvez ensuite utiliser "gmdate" pour obtenir la date réelle en PHP:

UNIX_DATE = (Excel_DATE - 25569) * 86400

et pour convertir une date Unix en une date Excel, utilisez cette formule:

Excel_DATE = 25569 + (UNIX_DATE / 86400)

Après avoir placé cette formule dans une variable, vous pouvez obtenir la date réelle dans PHP en utilisant cet exemple:

$UNIX_DATE = ($Excel_DATE - 25569) * 86400;
echo gmdate("d-m-Y H:i:s", $UNIX_DATE);
61
Ahmed Eissa

Lorsque vous utilisez PHPExcel, vous pouvez utiliser la fonction intégrée:

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

Un moyen facile ...

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

Il apparaît que votre variable est une chaîne ou attend une date au format US.
utilise 'DateTime :: createFromFormat' pour convertir la date en un format de date réel 

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