2013-10-30 29 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)); 
} 

P.S.です

@DiegoDD:日付の希望の形式は$形式である必要があります。例えば:日付の

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

これが2か月前に見つかった場合のみ!ありがとう! – rafi

+0

優秀:)ありがとう – mrfazolka

+0

最後の数日からうまく動作してくれてありがとうございました –

9

、のgetValue()日付/時間のためのエクセルシリアル化されたタイムスタンプ値であるfloatを返す必要があります...私はそれはあなたのトリム()は、文字列にキャストだだと思います。実際の値は、1900年1月1日(またはスプレッドシートが使用しているカレンダーに応じて1/1/1904)からの日数です。

getValue()の代わりにgetFormattedValue()またはgetCalculatedValue()を呼び出すと、セルの数値書式マスクに従って人間が読める文字列として書式設定された日付が返されます。

セルゲイの解決策はセルに日付/時刻の数値書式マスクがあるかどうかをテストし、適切なヘルパーメソッドを呼び出してそのExcelシリアライズされたタイムスタンプをUnixタイムスタンプに変換し、通常のPHP日付関数を使用して$ formatの値。ライブラリー、PhpOfficeの新バージョンではPHPのDateTimeオブジェクト

0

にエクセルシリアル化されたタイムスタンプを変換する同様のヘルパーメソッドPHPExcel_Shared_Date :: ExcelToPHPObject()があります、これを処理する関数はので、新しいコード形式がすべきexcelToDateTimeObjectですbe:

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