如何使用PHP将excel中的日期转换为sql格式?

时间:2014-05-12 07:13:33

标签: php mysql excel

我使用php从excel读取日期并使用以下代码转换为sql格式

$date = date('Y-m-d', strtotime($cell));

但转换后日期不正确。 如何解决这个问题呢?

3 个答案:

答案 0 :(得分:2)

PHPExcel中的值存储是Excel序列化日期时间值(浮点数,表示自19/1年1月1日或1/1/9004以来的天数,具体取决于是使用Windows还是Mac日历)。您需要将其转换为Unix时间戳或PHP DateTime对象,以使用PHP日期函数来设置格式

直接从PHPExcel日期处理代码中获取:

function ExcelToPHP($dateValue = 0, $ExcelBaseDate = 1900) {
    if ($ExcelBaseDate == 1900) {
        $myExcelBaseDate = 25569;
        //    Adjust for the spurious 29-Feb-1900 (Day 60)
        if ($dateValue < 60) {
            --$myExcelBaseDate;
        }
    } else {
        $myExcelBaseDate = 24107;
    }

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

根据需要将$ ExcelBaseDate设置为1900或1904,以指示您正在使用的Excel基本日历:Windows 1900或Mac 1904

如果你想要一个PHP DateTime对象:

function ExcelToPHPObject($dateValue = 0) {
    $dateTime = ExcelToPHP($dateValue);
    $days = floor($dateTime / 86400);
    $time = round((($dateTime / 86400) - $days) * 86400);
    $hours = round($time / 3600);
    $minutes = round($time / 60) - ($hours * 60);
    $seconds = round($time) - ($hours * 3600) - ($minutes * 60);

    $dateObj = date_create('1-Jan-1970+'.$days.' days');
    $dateObj->setTime($hours,$minutes,$seconds);

    return $dateObj;
}    //    function ExcelToPHPObject()

答案 1 :(得分:0)

$date = str_replace('/', '-', $cell);
$start_date = date('Y-m-d', strtotime($date));

答案 2 :(得分:0)

您可以跳过这样做,并要求MySQL读取您拥有的任何日期格式到其自己的DateTime类型。在MySQL中使用STR_TO_DATE(yourdatefield, '%d/%m/%Y')并可选地更改最后一个参数以满足您的需要...最后一个参数告诉MySQL期望日期字符串的格式。