У меня есть ряд дат ниже
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;