Excel contient les valeurs de date comme le nombre "réel" de jours depuis une date de base, qui peut être soit le 1er janvier 1900 (la valeur par défaut pour les versions Windows d'Excel) ou le 1er janvier 1904 (la valeur par défaut pour les versions Mac d'Excel) :l'heure est la partie fractionnaire, donc midi à une date donnée est supérieur de 0,5 à minuit. Pour ajouter à la misère, le 29 février 1900 est une date valide pour le calendrier Windows 1900.
En supposant le calendrier Windows 1900 :
function ExcelToPHP($dateValue = 0) {
$myExcelBaseDate = 25569;
// Adjust for the spurious 29-Feb-1900 (Day 60)
if ($dateValue < 60) {
--$myExcelBaseDate;
}
// Perform conversion
if ($dateValue >= 1) {
$utcDays = $dateValue - $myExcelBaseDate;
$returnValue = round($utcDays * 86400);
if (($returnValue <= PHP_INT_MAX) && ($returnValue >= -PHP_INT_MAX)) {
$returnValue = (integer) $returnValue;
}
} else {
$hours = round($dateValue * 24);
$mins = round($dateValue * 1440) - round($hours * 60);
$secs = round($dateValue * 86400) - round($hours * 3600) - round($mins * 60);
$returnValue = (integer) gmmktime($hours, $mins, $secs);
}
// Return
return $returnValue;
} // function ExcelToPHP()
si base Mac 1904, remplacer
$myExcelBaseDate = 25569;
// Adjust for the spurious 29-Feb-1900 (Day 60)
if ($dateValue < 60) {
--$myExcelBaseDate;
}
avec
$myExcelBaseDate = 24107;
Cela renverra une valeur de date/heure PHP (date de base standard de 1970), que vous pourrez ensuite formater comme vous le souhaitez en utilisant date();