2017-09-15 14 views
0

日付の配列の形式をstringからDateTimeに変換する効率的な方法はありますか?配列を文字列からdatetimeに変換する

私はDateTimesの配列と日付の配列を文字列形式(例: "2017-01-01")で持っています。 "array_intersect"を使用して各配列のどのレコードが一致するかを判断する必要がありますが、両方ともDateTime形式でなければ動作しません。

+0

おそらく? –

+0

@ MarkBaker ITYM 'array_map()' - より一般的に元の配列を変異させない方が良い – Alnitak

答えて

0

あなたがそうのような文字列を変換することができます...実際には配列内のオブジェクトの文字列値を比較しarray_intersectので

foreach($dateStrings as $dateString){ 
    $dates[] = DateTime::createFromFormat('Y-m-d', $dateString); 
} 

http://php.net/manual/en/datetime.createfromformat.php

+0

いいですね。 $ dateStringsと$ dateStringと$ datesは何を表していますか? –

+0

$ dateStringsは、文字列形式の日付の配列になります。 $ datesは、dateTimeでフォーマットされた要素の結果の配列で、既存のDateTimesの配列と交差することができます。 –

0

が、私は他の方法で回避を変換します:日時から文字列に。これは以下のようになります。

<?php 

// Suppose you have these DateTime objects 
$toConvert = [ 
    DateTime::createFromFormat('Y-m-d', '2012-04-22'), 
    DateTime::createFromFormat('Y-m-d', '2012-05-10'), 
    DateTime::createFromFormat('Y-m-d', '2013-06-03'), 
]; 

$dateStrings1 = ['2012-04-22', '2012-05-10', '2015-05-05']; 

$dateFormat = 'Y-m-d'; 

// Convert the array of DateTime objects to strings 
$dateStrings2 = array_map(function($dateTime) use ($dateFormat) { 
    return $dateTime->format($dateFormat); 
}, $toConvert); 

$intersection = array_intersect($dateStrings1, $dateStrings2); 

var_dump($intersection); 

これの出力は次のとおりです。

[あるarray_walk()](http://php.net/manual/en/function.array-を使用して

array (size=2) 0 => string '2012-04-22' (length=10) 1 => string '2012-05-10' (length=10)

関連する問題