【PhpSpreadsheet】日付型のセルから読みだした値を日付にする
問題
Excelの日付型のカラムの値を getValue や getCalculatedValue で取得すると、タイムスタンプでもない謎の数値が取得されます。
例)
2018/5/13 11:26 → 43233.476388889
2018/5/13 → 43233
yyyy-mm-dd の日付型の文字列が欲しいのですが、どうしたらよいですか。
答え
日付型のセルの値を読み取ると、Excelの日付のシリアル値が取得されます。
これを日付型の文字列にしたり、DateTimeオブジェクトにしたりするには、以下のように、excelToTimestamp、excelToDateTimeObjectを使用するとできます。
<?php
require '/mnt/c/var/lib/vendor/autoload.php';
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load('test.xlsx');
$worksheet = $spreadsheet->getSheet(0);
$x = $worksheet->getCell('N2')->getValue();
$x = date('Y-m-d H:i:s', PhpOffice\PhpSpreadsheet\Shared\Date::excelToTimestamp($x));
var_dump($x); // → string(19) "2018-05-13 20:26:00"
$x = $worksheet->getCell('N3')->getValue();
$x = PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($x)->format('Y-m-d');
var_dump($x); // → string(10) "2018-05-13
コメント