问题
I have xlsx
tables and I use PhpSpreadsheet to parse them. Some cells format is date. The problem is that PhpSpreadsheet returns the values from date-formatted cells in an unspecified format:
// How it looks in excel: 2017.04.08 0:00
$value = $worksheet->getCell('A1')->getValue(); // 42833 - doesn't look like a UNIX time
How to get the date from a cell in form of a UNIX time or a DateTimeInterface
instance?
回答1:
The value is amount of days passed since 1900. You can use the PhpSpreadsheet built-in functions to convert it to a unix timestamp:
$value = $worksheet->getCell('A1')->getValue();
$date = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToTimestamp($value);
Or to a PHP DateTime
object:
$value = $worksheet->getCell('A1')->getValue();
$date = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($value);
回答2:
When we are iterating with $row->getCellIterator()
or we might have other kinds of value, it might be useful to use getFormattedValue instead
while using getValue()
- Full name: Jane Doe => "Jane Doe"
- DOB: 11/18/2000 => 36848.0
while using getFormattedValue()
- Full name: Jane Doe => "Jane Doe"
- DOB: 11/18/2000 => "11/18/2000"
回答3:
Since i cant add comment just adding an answer for future users. you can convert a excel timestamp to unix timestamp by using the following code (from accepted answer)
$value = $worksheet->getCell('A1')->getValue();
$date = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToTimestamp($value);
And you can determine whether the given cell is Date Time using \PhpOffice\PhpSpreadsheet\Shared\Date::isDateTime($cell)
function.
来源:https://stackoverflow.com/questions/44304795/how-to-retrieve-date-from-table-cell-using-phpspreadsheet