2013-10-30 42 views

回答

49

嘗試使用

$cell = $excel->getActiveSheet()->getCell('B' . $i); 
$InvDate= $cell->getValue(); 
if(PHPExcel_Shared_Date::isDateTime($cell)) { 
    $InvDate = date($format, PHPExcel_Shared_Date::ExcelToPHP($InvDate)); 
} 

附:

@DiegoDD:應該提到$格式是日期所需的格式。例如: -

$InvDate = date($format = "Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($InvDate)); 
+1

只有當我能找到這2個月前!謝謝! – rafi

+0

非常好:)謝謝 – mrfazolka

+0

感謝它過去幾天的工作正常搜索 –

9

對於日期的getValue()應該返回一個浮動,這對於日期/時間Excel的系列化時間戳值...我懷疑這是你的修剪()就是這樣鑄造的字符串。實際值是從1/1/1900(或1/1/1904取決於電子表格使用的日曆)以來的天數。

根據單元格的numberformatmask,調用getFormattedValue()或getCalculatedValue()而不是getValue()應該返回格式爲日期格式的日期。

或者,Sergey的解決方案測試單元是否有日期/時間numberformatmask並調用適當的幫助器方法將該Excel序列化時間戳轉換爲unix時間戳,然後使用正常的PHP日期函數將其格式化爲人類可讀的$格式的值。還有一個類似的helper方法PHPExcel_Shared_Date :: ExcelToPHPObject(),將一個Excel序列化的時間戳轉換爲PHP DateTime對象

0

在圖書館,PhpOffice的新版本中,處理這一功能是excelToDateTimeObject因此,新的代碼格式應是:

$cell = $excel->getActiveSheet()->getCell('B' . $i); 
$InvDate= $cell->getValue(); 
if (PhpOffice\PhpSpreadsheet\Shared\Date::isDateTime($cell)) { 
    $InvDate = PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($InvDate); 
} 
相關問題