Php 在导入到数据库之前更改CSV数据的日期格式

Php 在导入到数据库之前更改CSV数据的日期格式,php,database,csv,ms-access,Php,Database,Csv,Ms Access,我遇到了一些困难。我有一个应用程序,即读取CSV文件数据,并将其导入Access数据库。问题是CSV文件中的日期格式-我想将其更改为年/月/日期。为此,在导入之前,我需要知道如何格式化它 代码: if(isset($\u POST['submit'])){ $i=0; 需要“connection.php”; 如果(是否上载了文件($文件['csv']['tmp\U名称]])){ echo“.”文件“$\u文件['csv']['name']”已成功上载。“”; } //将上载的文件导入数据库 $h

我遇到了一些困难。我有一个应用程序,即读取CSV文件数据,并将其导入Access数据库。问题是CSV文件中的日期格式-我想将其更改为年/月/日期。为此,在导入之前,我需要知道如何格式化它

代码:

if(isset($\u POST['submit'])){
$i=0;
需要“connection.php”;
如果(是否上载了文件($文件['csv']['tmp\U名称]])){
echo“.”文件“$\u文件['csv']['name']”已成功上载。“”;
}
//将上载的文件导入数据库
$handle=fopen($_文件['csv']['tmp_名称'],“r”);
$import=$db->prepare(“插入到(
日期和时间,
姓,
名字,
paidtime,
批准的时间,
notadhering)值(
?,?,?,?,?,?)");
while(($data=fgetcsv($handle,10000,“,”))!==FALSE){
如果($i>0){
$data=str_replace(“,”$data);
$data=str_replace('00:00',''$data);
$data=str_replace('0:00',''$data);
$data=str_replace('/01','/1',$data);
$data=str_replace('/02','/2',$data);
$data=str_替换('/03','/3',$data);
$data=str_replace('/04','/4',$data);
$data=str_替换('/05','/5',$data);
$data=str_替换('/06','/6',$data);
$data=str_替换('/07','/7',$data);
$data=str_替换('/08','/8',$data);
$data=str_替换('/09','/9',$data);
$import->bindParam(1,$data[0],PDO::PARAM_STR);
$import->bindParam(2$data[1],PDO::PARAM_STR);
$import->bindParam(3,$data[2],PDO::PARAM_STR);
$import->bindParam(4,$data[3],PDO::PARAM_STR);
$import->bindParam(5,$data[4],PDO::PARAM_STR);
$import->bindParam(6,$data[5],PDO::PARAM_STR);
str_替换(“,”$data);
$import->execute();
}
$i++;
}
$removation=$db->prepare(“从approvedtime='0'或NotAtthering为NULL的遵从性中删除”);
$removation->execute();
fclose($handle);
}

任何帮助都将不胜感激

编辑:

<?php
        require "connection.php";
        $getdata = $db->prepare("SELECT DISTINCT dateandtime FROM adherence ORDER BY dateandtime"); 
        $getdata->execute(); 
        $infodate = $getdata->fetchAll(PDO::FETCH_ASSOC);
        $myinfoDate =  date( "Y/n/j", strtotime($infodate));
            ?>
            <form name='add' method="POST">
                <select name="late" id="late">
                <?php foreach ($myinfoDate as $row): ?>
                <option><?=$row["dateandtime"]?></option>            
                <?php endforeach ?>
                </select>
                <input type='submit' name='submitlate'/>
            </form> 

在这里,我尝试从数据库中获取带有日期(没有时间)的信息。它给出错误:警告:strotime()要求参数1为字符串。
怎么处理这个?我在理解这个方面有一些问题…

不需要做那些字符串替换。。。strotime()可以将大多数字符串转换为日期

$myDate =  date("Y/n/j",strtotime(str_replace('/','-',$data[0])));
$import->bindParam(1, $myDate, PDO::PARAM_STR);

如果csv格式为m/d/y,则可以使用strotime()

但如果是d/m/y,则需要处理该字符串,因为strotime()假定具有2位年份的欧洲日期格式为y-m-d,因此需要使用类似

// split to date and time bits
$bits = explode(" ", $data['0']);
// split the date into day month year (assumed)
$dateBits = explode("/", $bits['0']);
// split the time into hour minute
$timeBits = explode(":", $bits['1']);
// rebuild the time from the bits
$new = mktime($timeBits['0'], $timeBits['1'], 0, $dateBits['1'], $dateBits['0'], $dateBits['2']);
$date = date("Y/m/d", $new);

csv文件的当前格式是什么?我已将图像嵌入OP链接的问题中。它将CSV格式演示为d/m/yyyy。非常感谢您的帮助!还有一件事-出于某种原因,在数据库中-月和日切换的地方,有时间像00:00:00可能删除它吗?我已经更新了我的答案,以修复日/月混淆(您的日期是欧洲格式的,mysql期望-而不是/)。如果不需要00:00:00,可以将列类型设置为date而不是timestamp,但将其保留在那里不会引起任何问题。实际上,现在它不起作用。它将所有日期显示为:1970.01.01是,其中的时间为00:00。
$date = date("Y/m/d", strtotime($data['0']));
// split to date and time bits
$bits = explode(" ", $data['0']);
// split the date into day month year (assumed)
$dateBits = explode("/", $bits['0']);
// split the time into hour minute
$timeBits = explode(":", $bits['1']);
// rebuild the time from the bits
$new = mktime($timeBits['0'], $timeBits['1'], 0, $dateBits['1'], $dateBits['0'], $dateBits['2']);
$date = date("Y/m/d", $new);