2017-04-12 20 views
-1

どのように配列をループし、すべての日付フィールドを日付オブジェクトに変換できますか?配列内の日付文字列を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']); 
} 
+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); 

少し混乱しています:

  • 私たちは、foreachの
  • ですべてkey=valuesペアを反復我々は単語のkeyをチェック-part dateと検出された日付フィールド
  • すべてがOKならば、値
  • のオブジェクトを作成し、foreach内で&を使用するため、値を直接配列内で変更します。

は、日付を含む文字列を変換するstrtotime()http://uk.php.net/manual/en/function.strtotime.phpを使用することができます素敵な一日

+0

このコードスニペットは質問を解決するかもしれませんが、[説明を含めて](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。 –

+0

@JohnConde [OK]をいくつかの情報を追加しました。 – JustOnUnderMillions

+0

偉大な答え。私はすでに数値の文字列を整数と浮動小数点に変換するためのループを持っていて、空の文字列をNULL値に変換しています。私は 'strpos'について考えたことがありません – Mentos93

-1

を持っています。

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

あなたは、日付を自分で再フォーマットした日付()の2番目のパラメータとして結果を渡すことができます。

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

私の答えは間違っていますか?なぜこれに投票するのですか? – user3441151

関連する問題