2013-05-10 53 views
0

我使用Ubuntu爲我的編碼獲取日期正確,不是從XLS表

我導入XLS文件數據到我的控制器,其中一個領域是迄今爲止,我已經格式化的細胞與日期格式,當我看着導入的數據一切正常,但日期字段是越來越以數字顯示,

爲例如:輸入的日期是2013-05-10它顯示我作爲39942

再經過檢查事情我已經通過保持日期值的格式來改變單元格的格式,然後它給我顯示了一個值39942這與我進入我的控制器的值相同。 如何在導入後得到正確的日期,

有關此的任何幫助..?

回答

0

Excel將日期/時間存儲爲序列化浮點時間戳,自1900年1月1日(或1904年1月1日,取決於Windows或Mac日曆)以來的天數,並記住它認爲1900是閏年。

直接從PHPExcel日期處理代碼摘自:

public static function ExcelToPHP($dateValue = 0) { 
    if (self::$ExcelBaseDate == self::CALENDAR_WINDOWS_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 ==作爲必要的自我:: CALENDAR_WINDOWS_1900指示Excel的基準日歷您使用的是:1900的Windows或Mac 1904

,如果你想有一個PHP DateTime對象,而不是:

public static function ExcelToPHPObject($dateValue = 0) { 
    $dateTime = self::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()