将dd / mm / yyyy转换为yyyy-mm-dd

时间:2014-11-13 11:01:45

标签: php mysql date csv

我想通过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中的日期格式。我能在这做什么?

3 个答案:

答案 0 :(得分:4)

我会使用DateTime代替strtotime

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

https://eval.in/220804

答案 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)));