我想通过PHP脚本将csv文件导入mysql。
CSV格式
"Value","Completion date"
"125.38","06/05/2010"
"120.38","10.05.2010"
"452","07/05/2010"
"120","07/05/2010"
"630","07/05/2010"
"200","20.07.2010"
"129.38","15.05.2010"
这里的问题是日期格式。 在CSV中,这是两种类型的日期dd / mm / yyyy和dd.mm.yyyy格式。所以我试图使用
将它们转换为yyyy-mm-dd格式date("Y-m-d",strtotime($value))
但" strtotime"功能计数dd / mm / yyyy格式为mm / dd / yyyy。
e.g $date =12/11/2014
echo date("Y-m-d",strtotime($date))
//Output 2014-12-11 But (it should be 2014-11-12).
如果分隔符是斜杠(/),则假设为美国m / d / y 所以它给出了错误的输出。我无法更改CSV中的日期格式。我能在这做什么?
答案 0 :(得分:4)
if( $date = DateTime::createFromFormat('d.m.Y', $datep) ) {
echo $date->format('Y-m-d') . PHP_EOL;
} else {
$date = DateTime::createFromFormat('d/m/Y', $datep);
echo $date->format('Y-m-d') . PHP_EOL;
}
例如;
<?php
$dates = array("06/05/2010", "10.05.2010");
foreach($dates as $datep) {
echo $datep .' becomes ';
if( $date = DateTime::createFromFormat('d.m.Y', $datep) ) {
echo $date->format('Y-m-d') . PHP_EOL;
} else {
$date = DateTime::createFromFormat('d/m/Y', $datep);
echo $date->format('Y-m-d') . PHP_EOL;
}
}
// 06/05/2010 becomes 2010-05-06
// 10.05.2010 becomes 2010-05-10
答案 1 :(得分:1)
您可以参考以下代码
$date = str_replace('.', '-', "20.07.2010");
$date = str_replace('/', '-', "20.07.2010");
echo date("d/m/y", strtotime($date));
格式化日期字符串然后传递给strtotime函数将正常工作。
答案 2 :(得分:1)
根据我的理解,最简单的方法是
$new_date = implode('-', array_reverse(explode('/', $old_date)));