Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Data das alterações do Excel quando carregadas no mysql


O Excel mantém os valores de data como o número "real" de dias desde uma data base, que pode ser 1º de janeiro de 1900 (o padrão para versões do Excel para Windows) ou 1º de janeiro de 1904 (o padrão para versões do Excel para Mac):a hora é a parte fracionária, então o meio-dia em qualquer data é 0,5 maior que a meia-noite. Para aumentar a miséria, 29 de fevereiro de 1900 é uma data válida para o calendário do Windows 1900.

Assumindo o calendário do 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()

se for base Mac 1904, substitua
$myExcelBaseDate = 25569;
    //  Adjust for the spurious 29-Feb-1900 (Day 60)
    if ($dateValue < 60) {
        --$myExcelBaseDate;
}

com
$myExcelBaseDate = 24107;

Isso retornará um valor de data/hora do PHP (data base padrão de 1970), que você pode formatar como desejar usando date();