2016-04-01 20 views
1

Bir CSV dosyasından veri alıyorum ve bir sütunun bir tarih listesi var. Bu tarihlerden bazıları 1970 öncesidir. Örnek bir tarih 10/03/1956php biçim tarihi 1970 öncesi fio MySQL insert

Bu tarihlerin MySQL'e ekleyebileceğim bir biçimde biçimlendirilmesinde bir sorunum var. i kullanırsanız

bu

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

Ben olmayan bir nesne

değil, bu hata mesaj üyesi işlev biçimi() için

Çağrısı olsun ben sert kod Böyle bir tarih,

burada

tam kod

$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

biraz kontrolünü yapmak gerekir, böylece CSV dosyası bulunur ve tüm içeriği sağlayacağız garanti edemezsin '$ col [8]' geçerli tarihlerdir (1901’den sonra olması gerektiğine inanıyorum). – apokryfos

+0

Olası kopyası [1970'den önceki tarihler için strtotime kullanma] (http://stackoverflow.com/questions/2871264/using-strtotime-for-dates-before-1970) –

+0

Dizenin doğru tarih biçiminde olduğundan emin misiniz? Örneğin, $ col [8] yazdıysanız ve örneğin $ col [7] ile karşılaştırırsanız. Biçimlendirmeyi dikkate alarak eşit mi? –

cevap

1

olan tüm alanlar CSV kontrol Eğer

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); 
}