2012-06-13 10 views
14

Mam tablicę dat poniżejPobierz najnowszą datę z tablicy dat

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" 
} 

i chcieliby poznać data ostatniego jak w: najbliżej do dnia dzisiejszego.

Jak mogę to zrobić?

Odpowiedz

18

Wykonaj pętlę, przekonwertuj dotychczasowe wartości i zapisz najnowsze, w var.

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

coś takiego ... masz pomysł Jeśli chcesz najnowsza PRZED dzisiaj:

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

Konwersja dat na znaczniki czasu tak, że masz ints. to jest proste porównanie int, większe = najnowsze. Jeśli twoja macierz jest duża, a twoi szukają występów, to prawdopodobnie jest to najprostszy i najszybszy sposób. – PEM

+0

Witam Pem, użyłem tego systemu i działa idealnie. Dzięki Nie próbuj innych, ale dzięki wszystkim chłopaki – sugarFornaciari

+0

Dziękuję, nie zapomnij potwierdzić odpowiedź :) dziękuję Przy okazji, jeśli chcesz randkę PEM

5

Sortuj tablicę według daty, a następnie uzyskać wartość przedniej tablicy.

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

+1 Z jedną modyfikacją, "najnowszy" nie może być datą przyszłą lub czymś zupełnie nieuprzejmy .. $ dates = array_filter ($ dates, function ($ val) {return strtotime ($ val) mschr

0

Oto moja propozycja:

$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 
0
$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("Y-m-d 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; 
} 
1

Ów mojego wariantu. Działa z datą w przyszłości.

$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); 
44

Zastosowanie max(), array_map() i strtotime().

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

To powinna być odpowiedź. Zdecydowanie najłatwiejsze rozwiązanie w porównaniu z resztą odpowiedzi. –

1

Uważam, że jest to najkrótszy kod, aby znaleźć ostatnią datę. możesz go zmienić, aby znaleźć indeks ostatniej daty lub znaleźć najnowsze w przyszłości lub przeszłości.

$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; 
0

Spróbuj tego:

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

Rafael, SO to strona angielskojęzyczna. Proszę pisać portuguese odpowiedzi na pytania zadane na http://pt.stackoverflow.com/. :) –

+1

Twoja odpowiedź zawsze zwraca "maksymalną" datę, a nie maksymalną datę wcześniejszą niż dzisiaj. Przed dodaniem do tablicy $ newDates potrzebujesz poniższego wiersza: if (strtotime ($ data)

+0

Ale "dzisiaj" można doskonale postrzegać jako " najnowsza data, w porównaniu do dzisiaj ". W tym przypadku nie widzę problemu z jego odpowiedzią. –

-1
$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("Y-m-d"); 
foreach ($DatesList as $dates) 
{ 
    if($dates >= $currentDate) 
    { 
     $storeDates[$counter] = $dates; 
     $counter++; 
    } 
} 
$closestDate = current($storeDates); 
echo $closestDate; 
0

Spróbuj to działa w 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'; 
} 
1
$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("Y-m-d g:i:s",max(array_map('strtotime',$dates))); 
+0

To miło, ale czy chcesz wyjaśnić, co robi twój kod? – Machavity

+0

jest już objęta odpowiedzią @ flowfree – reverbnation

Powiązane problemy