将数组中的日期字符串转换为datetime对象

时间:2017-04-12 12:39:38

标签: php arrays datetime

如何遍历数组并将所有日期字段转换为日期对象?

我有一个数组;

array (size=37)
  'id' => string '12' (length=3)
  'name' => string 'Jack' (length=6)
  'surname' => string 'Smith' (length=1)
  'age' => string '24' (length=1)
  'birthdate' => string '19920512' (length=0)
  'joindate' => string '20160923' (length=0)
  'graduationdate' => string '' (length=0)

我想将日期字符串转换为日期时间对象,如下所示;

$record['birthdate'] = \DateTime::createFromFormat('Ymd', $record['birthdate']);

但我想自动检测日期键,并将值设为datetime对象,如果该值为空字符串,则可以将其设为false。

我有点困惑

foreach ($record as $value) {
    $value = \DateTime::createFromFormat('Ymd', $value['xxx']);
}

2 个答案:

答案 0 :(得分:1)

foreach($array as $key => &$field){
    if(strpos($key,'date')!==false && strlen($field)==10 AND is_numeric($field)){
        $field = \DateTime::createFromFormat('Ymd', $field);
    }
}
print_r($array);

为什么这样:

  • 我们使用foreach
  • 迭代所有key=values
  • 我们检查key的单词date到检测到的日期字段
  • 然后我们检查10位数的可用数字
  • 如果一切正常,我们从值
  • 创建一个对象
  • 由于在foreach中使用了&,我们直接在数组中更改了值。

美好的一天

答案 1 :(得分:-1)

您可以使用strtotime() http://uk.php.net/manual/en/function.strtotime.php转换包含日期的字符串。

<?php
// both lines output 813470400
echo strtotime("19951012"), "\n",
     strtotime("12 October 1995");
?>

您可以将结果作为第二个参数传递给date()以自行重新格式化日期:

<?php
// prints 1995 Oct 12
echo date("Y M d", strtotime("19951012"));
?>