2017-04-12 218 views
-1

如何循环访问数组并将所有日期字段转换为日期对象?我有一个数组;我有数组;将日期字符串转换为日期时间对象

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对象,如果该值是一个空字符串也可以只是使它假的。

我有点困惑

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

可以循环在阵列的每一个的属性和检查与一个正则表达式的值。如果它匹配,(意味着它不是空的!),那么你有一个日期字符串,你可以使用DateTime类转换。 –

回答

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

为什么这样:

  • 我们遍历所有key=values双在foreach
  • 我们检查key的字 - 部分date到检测到的日期字段
  • 然后我们检查是否有可用的数字与10位
  • 如果一切正常,我们做一个对象从价值
  • 而且由于在foreach使用&,我们在数组中直接更改值。

有愉快的一天

+0

尽管此代码片段可能会解决问题,但[包括解释](// meta.stackexchange.com/questions/114762/explaining-entirely-基于代码的答案)确实有助于提高帖子的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。 –

+0

@JohnConde确定,添加了一些信息。 – JustOnUnderMillions

+0

很好的回答。我已经有该循环将数字字符串转换为整数和浮点数,并将空字符串转换为空值,我可以添加如果日期部分。我从来没有想过'strpos' – Mentos93

-1

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

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

可以传递的结果作为第二个参数,以日期()将自己重新格式化日期:

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

我的回答错了吗?为什么投下这个? – user3441151

相关问题