Excel houdt datumwaarden vast als het "echte" aantal dagen sinds een basisdatum, die ofwel 1 januari 1900 kan zijn (de standaard voor Windows-versies van Excel) of 1 januari 1904 (de standaard voor Mac-versies van Excel):de tijd is het fractionele deel, dus de middag op een bepaalde datum is 0,5 groter dan middernacht. Om de ellende nog groter te maken, is 29 februari 1900 een geldige datum voor de Windows 1900-kalender.
Uitgaande van de Windows 1900-kalender:
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()
als Mac 1904-basis, vervang
$myExcelBaseDate = 25569;
// Adjust for the spurious 29-Feb-1900 (Day 60)
if ($dateValue < 60) {
--$myExcelBaseDate;
}
met
$myExcelBaseDate = 24107;
Dit retourneert een PHP-datum/tijd-waarde (standaard 1970-basisdatum), die u vervolgens naar wens kunt opmaken met date();