web-dev-qa-db-fra.com

Lire le format de date en PHP EXCEL

J'ai lu un fichier Excel en utilisant PHP Excel.

Mais ce fichier Excel contient une date (format d'heure) PHP Excel renvoie des valeurs incorrectes pour ce cas

Mon code est en dessous

enter code hereinclude 'Classes/PHPExcel/IOFactory.php';

$inputFileName = 'index.xlsx';

//  Read your Excel workbook
try {
    $inputFileType = PHPExcel_IOFactory::identify($inputFileName);
    $objReader = PHPExcel_IOFactory::createReader($inputFileType);
    $objPHPExcel = $objReader->load($inputFileName);
} catch (Exception $e) {
    die('Error loading file "' . pathinfo($inputFileName, PATHINFO_BASENAME)
        . '": ' . $e->getMessage());
}

//  Get worksheet dimensions
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();

//  Loop through each row of the worksheet in turn
for ($row = 1; $row <= $highestRow; $row++) {
    //  Read a row of data into an array
    $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row,
        NULL, TRUE, FALSE);

    foreach ($rowData[0] as $k => $v)
        echo "Row: " . $row . "- Col: " . ($k + 1) . " = " . $v . "<br />";
}

n'importe qui peut aider pour cela .. Avoir une fonction spécifique pour ce cas dans PHPExcel ..

Mon fichier Excel d'entrée est en dessous

2013-12-12, 2013-12-13

Ma sortie est en dessous

41621, 41631

Vous avez une méthode pour convertir les données de sortie du format de date?

9
user5330699

Lorsque vous lisez le fichier xls avec la bibliothèque PHPExcel_Reader_Excel5, les données dans le fichier sont 39984, mais Excel le formate en utilisant un masque de mise en forme de date comme '2009-06-20'?

Excel contient les dates en tant que nombre de jours depuis le 1er janvier 1900 (sur le calendrier Windows 1900). PHPExcel stocke ses dates de la même manière, mais ne les formate pas automatiquement pour vous.

Vous pouvez les formater vous-même en utilisant PHPExcel_Style_NumberFormat::toFormattedString(39984,PHPExcel_Style_NumberFormat::FORMAT_DATE_DDMMYYYY)
ou l'un des autres masques de format dans
PHPExcel_Style_NumberFormat
, ou convertissez-le en une date PHP en utilisant
PHPExcel_Shared_Date::ExcelToPHP(39984) puis utilisez PHP date()
fonction pour le formater comme vous le souhaitez

Exemple:

$val = date('Y-m-d', PHPExcel_Shared_Date::ExcelToPHP($cell->getValue()));
30
murrometz

Une autre façon utilise gmdate:

$Excel_date = 43010; //here is that value 41621 or 41631
$unix_date = ($Excel_date - 25569) * 86400;
$Excel_date = 25569 + ($unix_date / 86400);
$unix_date = ($Excel_date - 25569) * 86400;
echo gmdate("Y-m-d", $unix_date);

//result is 2017-10-02
6
Ismael Fdez

Pour récupérer la date à laquelle vous devez convertir l'horodatage Excel en horodatage Linux. Ce que vous devez savoir, c'est:

  • Excel exprime les dates en jours tandis que Linux le fait en secondes.
  • Excel commence à compter à partir de 1900 alors que Linux le fait à partir de 1970.
  • Tous les horodatages sont en GM (entre-temps greenwitch), donc vous ne devriez pas le convertir avec gmdate(); mais utilisez simplement date();

Donc, pour vous convertir simplement d'Excel en Linux, vous devez:

  • supprimer 70 ans de jours: 25569
  • multiplier par secondes dans une journée: 86400

Voici le code:

function fromExcelToLinux($Excel_time) {
    return ($Excel_time-25569)*86400;
}

$linux_time = fromExcelToLinux(30637); 
echo date("Y-m-d",$linux_time);
//should print 1983-11-17

C'est tout le monde.

2
Max Cuttins

Si vous utilisez Excel_reader pour l'importation Excel, vous pouvez utiliser du code comme celui-ci.

include('Excel_reader/xlsxreader/simplexlsx.class.php');
$xlsx_class = new SimpleXLSX();
$j['IST_Time'] = '43010';
echo date('Y-m-d',$xlsx_class->unixstamp($j['IST_Time'])); // Result will be 2017-10-02

Et pour le temps

$j['IST_Time'] = '0.416666666667'; 
echo date('h:i A',$xlsx_class->unixstamp($j['IST_Time'])); //10:00 AM

ou affichez simplexlsx.class.php

0
Madhan