2017-09-15 2 views
0

Gibt es eine effiziente Möglichkeit, das Format eines Datumsfeldes aus Zeichenfolge in DateTime zu konvertieren?Konvertieren von Arrays von Zeichenfolge in Datetime

Ich habe ein Array von DateTimes und ein Array von Daten im String-Format (d. H. "2017-01-01"). Ich muss "array_intersect" verwenden, um festzustellen, welche Datensätze von jedem der Arrays übereinstimmen, aber beide müssen im DateTime-Format vorliegen, damit dies funktioniert.

+0

mit [array_walk()] (http://php.net/manual/en/function.array- walk.php) vielleicht? 'array_walk ($ myArray, function (& $ wert) {$ value = new DateTime ($ wert);});' –

+0

@MarkBaker ITYM 'array_map()' - besser im Allgemeinen nicht mutieren das ursprüngliche Array – Alnitak

Antwort

0

Sie können die Saiten konvertieren wie so ...

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

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

+0

sieht gut aus .. Was aber stellen $ dateStrings und $ dateString und $ dates dar? –

+0

$ dateStrings wäre das Array von Datumsangaben im String-Format. $ dates wäre das resultierende Array von dateTime-formatierten Elementen, die Sie mit Ihrem vorhandenen DateTimes-Array überschneiden können. –

0

Da array_intersect tatsächlich die String-Werte der Objekte innerhalb des Arrays vergleicht, würde ich die andere Art und Weise umwandeln um: von Datetime stringeln. Dies könnte wie folgt aussehen:

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

Der Ausgang dieses ist:

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

Verwandte Themen