Получить самую последнюю дату из массива дат

У меня есть ряд дат ниже

array(5) { [0]=> string(19) "2012-06-11 08:30:49" [1]=> string(19) "2012-06-07 08:03:54" [2]=> string(19) "2012-05-26 23:04:04" [3]=> string(19) "2012-05-27 08:30:00" [4]=> string(19) "2012-06-08 08:30:55" } 

и хотел бы знать самую последнюю дату, как в: ближе к сегодняшней дате.

Как я могу это сделать?

Сделайте цикл, преобразуйте значения на дату и сохраните последние, в var.

 $mostRecent= 0; foreach($dates as $date){ $curDate = strtotime($date); if ($curDate > $mostRecent) { $mostRecent = $curDate; } } 

что-то в этом роде … вы получаете идею Если вы хотите, чтобы последние последние были сегодня:

 $mostRecent= 0; $now = time(); foreach($dates as $date){ $curDate = strtotime($date); if ($curDate > $mostRecent && $curDate < $now) { $mostRecent = $curDate; } } 

Используйте max() , array_map() и strtotime() .

 $max = max(array_map('strtotime', $arr)); echo date('Ymj H:i:s', $max); // 2012-06-11 08:30:49 

Сортируйте массив по дате, а затем получите переднее значение массива.

 $dates = array(5) { /** omitted to keep code compact */ } $dates = array_combine($dates, array_map('strtotime', $dates)); arsort($dates); echo $dates[0]; 

Это мой вариант. Он работает с датой в будущем.

 $Dates = array( "2012-06-11 08:30:49", "2012-06-07 08:03:54", "2012-05-26 23:04:04", "2012-05-27 08:30:00", "2012-06-08 08:30:55", "2012-06-12 07:45:45" ); $CloseDate = array(); $TimeNow = time(); foreach ($Dates as $Date) { $DateToCompare = strtotime($Date); $Diff = $TimeNow - $DateToCompare; if ($Diff < 0) $Diff *= -1; if (count($CloseDate) == 0) { $CloseDate['Date'] = $Date; $CloseDate['Diff'] = $Diff; continue; } if ($Diff < $CloseDate['Diff']) { $CloseDate['Date'] = $Date; $CloseDate['Diff'] = $Diff; } } var_dump($CloseDate); 

Я считаю, что следующий – самый короткий код для поиска последней даты. вы можете изменить его, чтобы найти индекс последней даты или найти последнее в будущем или в прошлом.

 $Dates = array( "2012-06-11 08:30:49", "2012-06-07 08:03:54", "2012-05-26 23:04:04", "2012-05-27 08:30:00", "2012-06-08 08:30:55", "2012-06-22 07:45:45" ); $close_date = current($Dates); foreach($Dates as $date) if( abs(strtotime('now') - strtotime($date)) < abs(strtotime('now') - strtotime($close_date))) $close_date = $date; echo $close_date; 
 $dates = [ "2012-06-11 08:30:49" ,"2012-06-07 08:03:54" ,"2012-05-26 23:04:04" ,"2012-05-27 08:30:00" ,"2012-06-08 08:30:55" ]; echo date("Ymd g:i:s",max(array_map('strtotime',$dates))); 

Вот мое предложение:

 $most_recent = 0; foreach($array as $key => $date){ if( strtotime($date) < strtotime('now') && strtotime($date) > strtotime($array[$most_recent]) ){ $most_recent = $key; } } print $array[$most_recent]; //prints most recent day 
 $arrayy = array( "2012-06-11 08:30:49","2012-06-07 08:03:54","2012-05-26 23:04:04", "2012-05-27 08:30:00","2012-06-08 08:30:55" ); function getMostRecent($array){ $current = date("Ymd h:i:s"); $diff1 = NULL; $recent = NULL; foreach($array as $date){ if($diff = strcmp($current,$date)){ if($diff1 == NULL){ $diff1 = $diff; $recent = $date; } else{ if($diff < $diff1){ $diff1 = $diff; $recent = $date; } } } } return $recent; } 

Попробуй это:

 public function getLargerDate(array $datas) { $newDates = array(); foreach($datas as $data){ $newDates[strtotime($data)] = $data; } return $newDates[max(array_keys($newDates))]; } 

Попробуйте это работает 100%

 function getRecentDate($date_list,$curDate){ $curDate = strtotime($curDate); $mostRecent = array(); foreach($date_list as $date){ $diff = strtotime($date)-$curDate; if($diff>0){ $mostRecent[$diff] = $date; } } if(!empty($mostRecent)){ ksort($mostRecent); $mostRecent_key = key($mostRecent); if($mostRecent_key){ return $mostRecent[$mostRecent_key]; } }else{ return false; } } $date_list = array('15-05-2015','14-01-2015','18-03-2015','20-10-2016','12-12-2014','12-12-2015'); $curDate = '14-01-2015'; $get_recent = getRecentDate($date_list,$curDate); if($get_recent){ echo $get_recent; }else{ echo 'No recent date exists'; } 
 $DatesList = array( '2015-05-19', '2015-09-17', '2015-09-24', '2015-10-02', '2015-10-23', '2015-11-12', '2015-12-25' ); $counter = 0; $currentDate = date("Ymd"); foreach ($DatesList as $dates) { if($dates >= $currentDate) { $storeDates[$counter] = $dates; $counter++; } } $closestDate = current($storeDates); echo $closestDate;