【问题标题】:import csv with date to mysql through php [duplicate]通过php将带有日期的csv导入mysql [重复]
【发布时间】:2016-05-11 09:51:20
【问题描述】:

我正在尝试使用 php 将 csv 文件上传到我的 mysql 表。

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

我几乎尝试了所有Date 转换功能,但都没有成功。在 Mysql 表上总是看到 0000-00-00。

如何正确转换?

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

$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

【问题讨论】:

    标签: php mysql date csv datetime


    【解决方案1】:

    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;
    

    结果是一样的。

    【讨论】:

    • 我完全赞成使用DateTime 对象:)
    • @Catharsis 我正在做一个项目,我应该使用超出 unix 时间戳范围的日期。所以这是我第一次使用DateTime。我不敢相信没有它我还能活下去。另一个优点是DateTimeZone 的东西。喜欢它:)
    • @lolka_bolka 谢谢!它起作用了......我也尝试了爆炸(“/”等),它也穿了。但我很好奇..如果我不知道 csv 中的日期格式,有没有办法做到这一点?我的意思是一种通用转换?
    • 没有通用的解决方案。您可以始终使用 substr 事物,当日期在 dd[any separator]mm[any separator]yyyy 时,只有分隔符可以更改。 substr 有什么作用?获取最后 4 个字符串,添加 - thne 获取 5,6 字符添加 - 字符串并获取前 2 个字符。如果这是你的问题。 strtotime 等待 yyyy-mm-dd fromat,(或 Y-m-d H:i:s)
    • 知道了.. 无论如何 - 非常非常感谢!! :) :) :)
    【解决方案2】:

    我相信您需要将/ 转换为- 以便strtotime 理解格式..

    例如

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

    【讨论】:

      【解决方案3】:

      您需要使用 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')
      

      【讨论】:

        猜你喜欢
        • 2013-08-30
        • 2019-03-14
        • 2015-06-10
        • 1970-01-01
        • 2017-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多