sql >> Base de Datos >  >> RDS >> Mysql

La fecha de los cambios de Excel cuando se carga en mysql

Excel mantiene los valores de fecha como el número "real" de días desde una fecha base, que puede ser el 1 de enero de 1900 (el valor predeterminado para las versiones de Excel para Windows) o el 1 de enero de 1904 (el valor predeterminado para las versiones de Excel para Mac):la hora es la parte fraccionaria, por lo que el mediodía de cualquier fecha dada es 0,5 mayor que la medianoche. Para empeorar la miseria, el 29 de febrero de 1900 es una fecha válida para el calendario de Windows 1900.

Asumiendo el calendario de 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 es base Mac 1904, reemplace

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

con

$myExcelBaseDate = 24107;

Esto devolverá un valor de fecha/hora de PHP (fecha base estándar de 1970), que luego puede formatear como desee usando date();