通过php将日期导入到mysql的csv

时间:2016-05-11 09:51:21

标签: php mysql date csv datetime

我试图用php上传一个csv文件到我的mysql表。

我听说过inline命令,但问题是csv日期格式为dd/mm/yyyy且mysql格式为yyyy-mm-dd

我几乎尝试了每个Date转换函数,但它没有成功。总是在Mysql表上看到PIX。

如何正确转换?

这是我尝试的最后一件事:

$date[0]是csv中的日期单元格 - 26/05/2016,而mysql中的第二列是日期)

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

输出结果为:

01-01-1970
(blank)
26/05/2015
1970-01-01

3 个答案:

答案 0 :(得分:2)

strtotime等待输入expected格式。

您需要拆分字符串,并从中创建Y-m-d fromat,或者您可以使用DateTime对象。

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

<强>输出

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;

结果是一样的。

答案 1 :(得分:0)

您需要使用SET子句以及一个变量来引用该列中行的内容。在列列表中,将日期列分配给变量名称。然后,您可以在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')

答案 2 :(得分:-1)

我认为您需要将/转换为-,以便strtotime了解格式..

例如

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