Mysql
 sql >> Database >  >> RDS >> Mysql

La data da Excel cambia quando viene caricata in mysql

Excel mantiene i valori di data come numero "reale" di giorni trascorsi da una data di base, che può essere il 1 gennaio 1900 (l'impostazione predefinita per le versioni Windows di Excel) o il 1 gennaio 1904 (l'impostazione predefinita per le versioni Mac di Excel):l'ora è la parte frazionaria, quindi mezzogiorno in una data data è 0,5 maggiore di mezzanotte. Per aggiungere ulteriore sofferenza, il 29 febbraio 1900 è una data valida per il calendario di Windows 1900.

Supponendo il calendario di 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 Mac 1904 base, sostituire

$myExcelBaseDate = 25569;
    //  Adjust for the spurious 29-Feb-1900 (Day 60)
    if ($dateValue < 60) {
        --$myExcelBaseDate;
}

con

$myExcelBaseDate = 24107;

Questo restituirà un valore di data/ora PHP (data di base standard 1970), che puoi quindi formattare come desideri utilizzando date();