2016-04-01 18 views
1

私はCSVファイルからデータをインポートしていますが、1つのカラムには日付のリストがあります。これらの日付の一部は1970年以前です。例の日付は10/03/1956ですphp形式の日付1970年以前の日付からMySQLの挿入

これらの日付をMySQLに挿入できる形式にフォーマットする際に問題があります。

私はこの

$date = DateTime::createFromFormat('d/m/Y', $col[8]); 

を使用する場合、私はメンバ関数形式に

コール()非オブジェクト

のが、私のハードコードであれば、このエラーメッセージが表示されますこのような日付は、それが動作します

$date = DateTime::createFromFormat('d/m/Y', '21/03/1966'); 
ここ

は、完全なコード

$inputFileName = 'data.csv'; 

if (($handle = fopen($inputFileName, "r")) !== FALSE) { 

    fgetcsv($handle); 

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 

     $num = count($data); 

     for ($i = 0; $i < $num; $i++) { 
      $col[$i] = $data[$i]; 
     } 

     try { 
      $date = DateTime::createFromFormat('d/m/Y', trim($col[8])); 
     } 
     catch (Exception $e) { 
      echo $e->getMessage(); 
      exit(1); 
     } 

     echo $date->format("Y-m-d"); 
    } 
    fclose($handle); 
} 
+2

をほとんど制御を行う必要がありますので、あなたのCSVファイルに存在し、すべての内容を確認します保証はありません'$ col [8]'は有効な日付です(私は1901年以降でなければならないと信じています)。 – apokryfos

+0

[1970年以前の日付にstrtotimeを使用する]の複製があります(http://stackoverflow.com/questions/2871264/using-strtotime-for-dates-before-1970) –

+0

文字列が正しい日付形式であることは確かですか? $ col [8]を出力して$ col [7]と比較すると、彼らはフォーマットを考慮して等しいのですか? –

答えて

1

であるあなたは、すべてのフィールドがあなたのCSVを点検し、あなたが

define('DATE_COLUMN', 8); 
// @Warning : avoid hard coding file name ! 
$inputFileName = 'data.csv'; 

if (($handle = fopen($inputFileName, "r")) !== FALSE) { 

    fgetcsv($handle); 

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 

     $num = count($data); 

     for ($i = 0; $i < $num; $i++) { 
      $col[$i] = $data[$i]; 
     } 
     $dateString = NULL; 
     if (isset($col[DATE_COLUMN]) && 
      strlen(trim($col[DATE_COLUMN])) > 0) { 

      $dateString = trim($col[DATE_COLUMN]); 
     } 

     if (is_null($dateString)) { 
      // print log or throw an exception if you want 
     } 
     else { 
      try { 
       $date = DateTime::createFromFormat('d/m/Y', dateString); 
       echo $date->format("Y-m-d"); 
      } 
      catch (Exception $e) { 
       echo $e->getMessage(); 
       exit(1); 
      } 
     } 

    } 
    fclose($handle); 
} 
関連する問題