通过php将带有日期的csv导入mysql
我正试图用php将csv文件上传到我的mysql表中 我听说了通过php将带有日期的csv导入mysql,php,mysql,date,csv,datetime,Php,Mysql,Date,Csv,Datetime,我正试图用php将csv文件上传到我的mysql表中 我听说了inline命令,但问题是csv日期格式是dd/mm/yyyy,而mysql格式是yyyy-mm-dd 我几乎尝试了所有的Dateconvert函数,但都没有成功。总是在Mysql表上看到0000-00-00 如何正确转换 这是我最后一次尝试: ($date[0]是csv中的日期单元格。-26/05/2016,mysql中的第二列是日期) strotime等待输入格式 您需要拆分字符串,并从中创建一个Y-m-dfromat,或者您可以
inline
命令,但问题是csv日期格式是dd/mm/yyyy
,而mysql格式是yyyy-mm-dd
我几乎尝试了所有的Date
convert函数,但都没有成功。总是在Mysql表上看到0000-00-00
如何正确转换
这是我最后一次尝试:
($date[0]
是csv中的日期单元格。-26/05/2016
,mysql中的第二列是日期)
strotime
等待输入格式
您需要拆分字符串,并从中创建一个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
使用strotime
$string = '26/05/2016';
$trydate = date("Y-m-d", strtotime(substr($string, -4) . "-" . substr($string, 3, 2) . "-" . substr($string, 0, 2)));
echo $trydate;
结果是相同的。
strotime
等待输入格式
您需要拆分字符串,并从中创建一个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
使用strotime
$string = '26/05/2016';
$trydate = date("Y-m-d", strtotime(substr($string, -4) . "-" . substr($string, 3, 2) . "-" . substr($string, 0, 2)));
echo $trydate;
结果是一样的。我认为您需要将
/
转换为-
,以便strotime理解格式
比如说
while(...) {
$date = date('Y-m-d', strtotime(str_replace('/', '-', $data[0])));
echo $date;
$import = "...";
}
我认为您需要将
/
转换为-
,以便strotime理解格式
比如说
while(...) {
$date = date('Y-m-d', strtotime(str_replace('/', '-', $data[0])));
echo $date;
$import = "...";
}
您需要使用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')
您需要使用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')
我衷心赞成使用
DateTime
对象:)@Catharsis我正在从事一个项目,在这个项目中,我应该使用超出unix时间戳范围的日期。这是我第一次使用DateTime
。我真不敢相信没有它我还能活下去。另一个优点是DateTimeZone
功能。喜欢它:)@lolka_bolka谢谢!它起作用了。。。我也试过使用explode(“/”等),它也工作了。但我很好奇……如果我不知道csv中的日期格式,有没有办法做到这一点?我的意思是某种通用转换?没有通用的解决方案。当日期在dd[any separator]mm[any separator]yyyy
中时,您可以始终使用substr
对象,因此只有分隔符可以更改。你做什么?获取最后4个字符串,添加一个-
字符串,然后获取5,6
字符添加-
字符串并获取前2个字符。如果这是你的问题。STROTIME等待yyyy mm dd fromat(或Y-m-d H:i:s)收到了。。无论如何-非常感谢!!:):)我衷心赞成使用DateTime
对象:)@Catharsis我正在从事一个项目,在这个项目中,我应该使用超出unix时间戳范围的日期。这是我第一次使用DateTime
。我真不敢相信没有它我还能活下去。另一个优点是DateTimeZone
功能。喜欢它:)@lolka_bolka谢谢!它起作用了。。。我也试过使用explode(“/”等),它也工作了。但我很好奇……如果我不知道csv中的日期格式,有没有办法做到这一点?我的意思是某种通用转换?没有通用的解决方案。当日期在dd[any separator]mm[any separator]yyyy
中时,您可以始终使用substr
对象,因此只有分隔符可以更改。你做什么?获取最后4个字符串,添加一个-
字符串,然后获取5,6
字符添加-
字符串并获取前2个字符。如果这是你的问题。STROTIME等待yyyy mm dd fromat(或Y-m-d H:i:s)收到了。。无论如何-非常感谢!!:):)