2017-09-15 25 views
0

将日期数组的格式从字符串转换为DateTime是否有效?将数组从字符串转换为日期时间

我有一个DateTimes数组和一个字符串格式的日期数组(即“2017-01-01”)。我需要使用“array_intersect”来确定每个数组的哪些记录匹配,但它们必须都是DateTime格式才能工作。

+0

使用[array_walk()](http://php.net/manual/en/function.array-也许吧? 'array_walk($ myArray,function(&$ value){$ value = new DateTime($ value);});' –

+0

@MarkBaker ITYM'array_map()' - 通常不会改变原始数组 – Alnitak

回答

0

您可以转换像这样的琴弦......

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

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

+0

看起来不错。 。但$ dateStrings和$ dateString和$日期代表什么? –

+0

$ dateStrings将是字符串格式的日期数组。 $日期将是dateTime格式化元素的结果数组,您可以与现有的DateTime数组相交。 –

0

由于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)

相关问题