web-dev-qa-db-ja.com

PhpSpreadsheetを使用してテーブルセルから日付を取得する方法

xlsxテーブルがあり、PhpSpreadsheetを使用してそれらを解析しています。一部のセル形式は日付です。問題は、PhpSpreadsheetが日付形式のセルから値を指定されていない形式で返すことです。

// How it looks in Excel: 2017.04.08 0:00
$value = $worksheet->getCell('A1')->getValue();  // 42833 - doesn't look like a UNIX time

UNIX時間またはDateTimeInterfaceインスタンスの形式でセルから日付を取得する方法は?

9
Finesse

値は1900年から経過した日数です。PhpSpreadsheet組み込み関数を使用して、UNIXタイムスタンプに変換できます。

$value = $worksheet->getCell('A1')->getValue();
$date = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToTimestamp($value);

またはPHP DateTimeオブジェクトに:

$value = $worksheet->getCell('A1')->getValue();
$date = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($value);
22
Finesse

$row->getCellIterator()で反復している場合、または他の種類の値がある場合は、代わりに getFormattedValue を使用すると便利です。

getValue()の使用中

  • 氏名:Jane Doe => "Jane Doe"
  • DOB:2000年11月18日=> 36848.0

getFormattedValue()の使用中

  • 氏名:Jane Doe => "Jane Doe"
  • DOB:2000年11月18日=>「2000年11月18日」
2
Jay

コメントを追加できないので、将来のユーザーのために回答を追加するだけです。次のコードを使用して、ExcelタイムスタンプをUNIXタイムスタンプに変換できます(承認された回答から)

_ $value = $worksheet->getCell('A1')->getValue();
 $date = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToTimestamp($value);
_

また、\PhpOffice\PhpSpreadsheet\Shared\Date::isDateTime($cell)関数を使用して、指定したセルが日付時刻かどうかを判断できます。

1
Jemshid m h