【问题标题】:convert dd/mm/yyyy into yyyy-mm-dd [duplicate]将 dd/mm/yyyy 转换为 yyyy-mm-dd [重复]
【发布时间】:2014-11-13 11:01:45
【问题描述】:

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

【问题讨论】:

  • @SverriM.Olsen :我检查了但它与这个案例无关。在这里我正在插入 DB。它只允许 yyyy-mm-dd 格式。如果我使用 strtotime 那么对于 dd/mm/yyyy 将其计数 mm 格式化为 dd
  • 与这个问题相同。阅读this answer

标签: php mysql date csv


【解决方案1】:

我会使用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

【讨论】:

  • 没有理由使用正则表达式。如果格式不匹配,createFromFormat() 返回false。您可以尝试这两种格式,然后使用有效的一种。
  • 非常正确@SverriM.Olsen - 进行了修改,谢谢!
【解决方案2】:

你可以参考下面的代码,

$date = str_replace('.', '-', "20.07.2010");
$date = str_replace('/', '-', "20.07.2010");
echo date("d/m/y", strtotime($date));

格式化日期字符串,然后传递给strtotime函数就可以了。

【讨论】:

    【解决方案3】:

    据我所知,最简单的做法是

    $new_date = implode('-', array_reverse(explode('/', $old_date)));
    

    【讨论】:

      猜你喜欢
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 2021-11-22
      相关资源
      最近更新 更多