Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Das Datum aus Excel ändert sich, wenn es in mysql hochgeladen wird

Excel speichert Datumswerte als die "echte" Anzahl von Tagen seit einem Basisdatum, das entweder der 1. Januar 1900 (der Standard für Windows-Versionen von Excel) oder der 1. Januar 1904 (der Standard für Mac-Versionen von Excel) sein kann:die Zeit ist der Bruchteil, also ist der Mittag an einem bestimmten Datum um 0,5 größer als Mitternacht. Um das Elend noch zu vermehren, ist der 29. Februar 1900 ein gültiges Datum für den Windows 1900-Kalender.

Unter der Annahme des Windows 1900-Kalenders:

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

wenn Mac 1904-Basis, ersetzen

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

mit

$myExcelBaseDate = 24107;

Dadurch wird ein PHP-Datums-/Uhrzeitwert (Standarddatum 1970) zurückgegeben, den Sie dann mit date();

nach Belieben formatieren können