web-dev-qa-db-ja.com

PHP EXCELで日付形式を読み取る

PHP Excelを使用してExcelファイルを読みました。

しかし、そのExcelファイルには日付(時間形式)が含まれていますPHP Excelはその場合に誤った値を返します

私のコードは下にあります

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 />";
}

誰でもこれを助けることができます。この場合、PHPExcelに特定の機能があります。

入力Excelファイルは下にあります

2013年12月12日、2013年12月13日

私の出力は以下にあります

41621、41631

日付形式の出力データを変換する方法はありますか?

9
user5330699

PHPExcel_Reader_Excel5 libを使用してxlsファイルを読み取る場合、ファイル内のデータは39984ですが、Excelは日付フォーマットマスクを使用して「2009-06-20」としてフォーマットしますか?

Excelは、1900年1月1日(Windows 1900カレンダー上)からの日数のカウントとして日付を保持します。 PHPExcelは同じ方法で日付を保存しますが、日付を自動的にフォーマットしません。

PHPExcel_Style_NumberFormat::toFormattedString(39984,PHPExcel_Style_NumberFormat::FORMAT_DATE_DDMMYYYY)を使用して、自分でフォーマットできます。
またはその他のフォーマットマスク
_PHPExcel_Style_NumberFormat_
、またはPHPを使用して日付に変換します
PHPExcel_Shared_Date::ExcelToPHP(39984)次に、PHPのdate()を使用します
希望どおりにフォーマットする関数

例:

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

もう1つの方法は、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

日付を取得するには、ExcelタイムスタンプからLinuxタイムスタンプに変換する必要があります。あなたが知る必要があるのは:

  • Excelは日付をで表しますが、Linuxはで表します。
  • Excelは1900年から数え始めますが、Linuxは1970年から数えます。
  • すべてのタイムスタンプはGM(greenwitch meantime)にあるため、gmdate();で変換しないでください代わりにdate();

したがって、ExcelからLinuxに単純に変換するには、次のことを行う必要があります。

  • 70年の日数を削除:25569
  • 1日の秒数を乗算します:86400

これはコードです:

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

それはすべての人々です。

2
Max Cuttins

ExcelのインポートにExcel_readerを使用している場合は、次のようなコードを使用できます。

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

そして、時間のために

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

またはsimplexlsx.class.phpを表示

0
Madhan