sql >> Databáze >  >> RDS >> Mysql

Datum z excelu se změní při nahrání do mysql

Excel uchovává hodnoty data jako „skutečný“ počet dní od základního data, což může být buď 1. leden 1900 (výchozí pro verze Excelu pro Windows) nebo 1. leden 1904 (výchozí pro verze Excelu pro Mac):čas je zlomkovou část, takže poledne jakéhokoli daného data je o 0,5 větší než půlnoc. Aby toho nebylo málo, 29. února 1900 je platné datum pro kalendář Windows 1900.

Za předpokladu kalendáře 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()

pokud základna Mac 1904, vyměňte

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

s

$myExcelBaseDate = 24107;

To vrátí hodnotu data/času PHP (standardní základní datum 1970), kterou pak můžete formátovat podle potřeby pomocí date();




  1. Postgres - Transponujte řádky do sloupců

  2. Pole v klauzuli IN() Oracle PLSQL

  3. Chyba MySQL:mysql_fetch_assoc() očekává, že parametr 1 bude zdrojem

  4. Jak získat informace o typu definovaném uživatelem?