將日期數組的格式從字符串轉換爲DateTime是否有效?將數組從字符串轉換爲日期時間
我有一個DateTimes數組和一個字符串格式的日期數組(即「2017-01-01」)。我需要使用「array_intersect」來確定每個數組的哪些記錄匹配,但它們必須都是DateTime格式才能工作。
將日期數組的格式從字符串轉換爲DateTime是否有效?將數組從字符串轉換爲日期時間
我有一個DateTimes數組和一個字符串格式的日期數組(即「2017-01-01」)。我需要使用「array_intersect」來確定每個數組的哪些記錄匹配,但它們必須都是DateTime格式才能工作。
您可以轉換像這樣的琴絃......
foreach($dateStrings as $dateString){
$dates[] = DateTime::createFromFormat('Y-m-d', $dateString);
}
看起來不錯。 。但$ dateStrings和$ dateString和$日期代表什麼? –
$ dateStrings將是字符串格式的日期數組。 $日期將是dateTime格式化元素的結果數組,您可以與現有的DateTime數組相交。 –
由於array_intersect
實際上數組中的對象的字符串值進行比較,我周圍的其他方法轉換:從日期時間串起來。這可能如下所示:
<?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 (size=2) 0 => string '2012-04-22' (length=10) 1 => string '2012-05-10' (length=10)
使用[array_walk()](http://php.net/manual/en/function.array-也許吧? 'array_walk($ myArray,function(&$ value){$ value = new DateTime($ value);});' –
@MarkBaker ITYM'array_map()' - 通常不會改變原始數組 – Alnitak