web-dev-qa-db-fra.com

Comment récupérer la date d'une cellule de tableau à l'aide de PhpSpreadsheet?

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?

9
Finesse

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);
22
Finesse

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()

  • Nom complet: Jane Doe => "Jane Doe"
  • Né le 18/11/2000 => 36848,0

tout en utilisant getFormattedValue()

  • Nom complet: Jane Doe => "Jane Doe"
  • DOB: 18/11/2000 => "18/11/2000"
2
Jay

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).

1
Jemshid m h