2012-02-15 71 views
3

我试图上传一个包含日期和其他文本的列的Excel电子表格。Excel中的日期在上传到mysql时发生变化

日期的格式是1/24/2012,但是当我将它加载到mysql时,它将其更改为某些十进制格式,例如40932 ????

我怎么上传它,没有改变? 我能做什么我真的被困在这一个!

任何帮助将不胜感激。

+1

你正在加载它的表的MySQL模式是什么? – crush 2012-02-15 17:44:55

+0

mySQL预计'YYYY-MM-DD'格式的日期。这可能是你的问题(连同列可能没有正确的类型) – 2012-02-15 17:45:24

+0

你如何从Excel导入到MySQL?你看到的是Excel的时间戳格式。 – 2012-02-15 17:46:04

回答

7

Excel将日期值保存为自基准日期以来的“真实”天数,可以是1900年1月(Excel版的Windows版本的默认值)或1904年1月1日(Mac版Excel的默认值) :时间是小数部分,所以任何给定日期的中午都比午夜大0.5。为了增加痛苦,1900年2月29日是Windows 1900日历的有效日期。

假设在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() 

如果苹果1904基,更换

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

$myExcelBaseDate = 24107; 

这将返回一个PHP日期/时间值(标准1970年基准日期),然后你可以使用date();

+0

谢谢:)这工作:) – Sabari 2012-02-16 14:25:22

相关问题