2016-05-11 15 views
0

私はPHPを使って自分のmysqlテーブルにcsvファイルをアップロードしようとしています。PHPを使ってmysqlに日付でcsvをインポート

inlineコマンドについて聞いたことがありますが、問題はcsvの日付形式がdd/mm/yyyyで、mysql形式がyyyy-mm-ddだということです。

ほとんどすべてDate変換機能を試しましたが、うまくいきません。常にMysqlテーブルで0000-00-00を参照してください。

どうすれば正しく変換できますか?

これは私が試した最後のものである:

(。$date[0]はCSVでの日付セルである - 26/05/2016、およびMySQLで2番目の列は日付です)

while ($data = fgetcsv($handle, 1000, ",")) 
    { 
     $date = strtotime($data[0]); 
     $newDate = date("d-m-Y", strtotime($data[0])); 
     $trydate = date("Y-m-d", strtotime($newDate)); 
     echo $newDate . "<br>". $date. "<br>" . $data[0] . "<br>". $trydate. "<br>"; 
     $import="INSERT INTO `testresult` (cityid, date, testnum,result) VALUES('$data[1]','$newDate','$data[3]','$data[2]')"; 

     mysqli_query($con,$import) or die(mysql_error()); 
    } 

出力しました:

入力 expectedフォーマットを待っ
01-01-1970 
(blank) 
26/05/2015 
1970-01-01 

答えて

2

strtotime

文字列を分割してからY-m-dを作成するか、DateTimeオブジェクトを使用する必要があります。

$dateString = '11/05/2016'; 
$Date = DateTime::createFromFormat('d/m/Y', $dateString, new DateTimeZone(('UTC'))); 
echo $Date->format('Y-m-d'); 

OUTPUT

2016-05-11 

strtotime

$string = '26/05/2016'; 
$trydate = date("Y-m-d", strtotime(substr($string, -4) . "-" . substr($string, 3, 2) . "-" . substr($string, 0, 2))); 
echo $trydate; 

結果と同じです。

+0

私は、全体の心を込めて、私はUnixタイムスタンプの範囲外にあるものの日付を使用する必要があるプロジェクトに取り組んでいます 'DateTime'オブジェクト:) – Catharsis

+0

@Catharsisを使用を承認。だから、これは私が 'DateTime'を使っているとき初めてでした。私はそれなしで生きることができるとは信じられない。もう一つの利点は、 'DateTimeZone'です。それを愛して:) – vaso123

+0

@ lolka_bolkaありがとう!それは働いた...私はまた、爆発( "/"など)で試してみて、それも傷ついた。しかし、私は好奇心が強いです。私はcsvの日付形式がわからない場合、それを行う方法はありますか?私は普遍的な変換の種類を意味する? –

-2

は、私はあなたが参照するための変数と一緒に、SET句を使用する必要がある例

while(...) { 
    $date = date('Y-m-d', strtotime(str_replace('/', '-', $data[0]))); 
    echo $date; 
    $import = "..."; 
} 
0

ため

..あなたが/-になるようのstrtotime形式を理解して変換する必要があると考えていますその列の行の内容列リストで、日付列を変数名に割り当てます。その後、SETステートメントで使用できます。

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE testresult 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
(cityid, @var1, testnum,result) 
set dateOfBirth = STR_TO_DATE(@var1, '%d/%m/%y') 
関連する問題