J'ai xlsx
tables et j'utilise PhpSpreadsheet pour les analyser. Le format de certaines cellules est la date. Le problème est que PhpSpreadsheet renvoie les valeurs des cellules formatées en date dans un format non spécifié:
// How it looks in Excel: 2017.04.08 0:00
$value = $worksheet->getCell('A1')->getValue(); // 42833 - doesn't look like a UNIX time
Comment obtenir la date d'une cellule sous la forme d'une heure UNIX ou d'une instance DateTimeInterface
?
La valeur est le nombre de jours écoulés depuis 1900. Vous pouvez utiliser les fonctions intégrées de PhpSpreadsheet pour le convertir en horodatage Unix:
$value = $worksheet->getCell('A1')->getValue();
$date = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToTimestamp($value);
Ou vers un objet PHP DateTime
:
$value = $worksheet->getCell('A1')->getValue();
$date = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($value);
Lorsque nous itérons avec $row->getCellIterator()
ou que nous pouvons avoir d'autres types de valeur, il peut être utile d'utiliser getFormattedValue à la place
tout en utilisant getValue()
tout en utilisant getFormattedValue()
Puisque je ne peux pas ajouter de commentaire, il suffit d'ajouter une réponse pour les futurs utilisateurs. vous pouvez convertir un horodatage Excel en horodatage unix en utilisant le code suivant (à partir de la réponse acceptée)
$value = $worksheet->getCell('A1')->getValue();
$date = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToTimestamp($value);
Et vous pouvez déterminer si la cellule donnée est la date et l'heure à l'aide de la fonction \PhpOffice\PhpSpreadsheet\Shared\Date::isDateTime($cell)
.