2012-06-13 58 views
14

Tôi có mảng của ngày bên dướiLấy ngày gần đây nhất từ ​​một loạt các ngày

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

và muốn biết ngày gần đây nhất như trong: gần nhất với ngày hôm nay.

Tôi có thể làm như thế nào?

Trả lời

18

Thực hiện vòng lặp, chuyển đổi các giá trị cho đến ngày và lưu trữ giá trị gần đây nhất trong một var.

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

một cái gì đó như thế ... bạn sẽ có được ý tưởng Nếu bạn muốn gần đây nhất TRƯỚC hôm nay:

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

Chuyển đổi ngày để timestamps nên bạn chỉ còn ints. sau đó nó là một so sánh int đơn giản, lớn hơn = gần đây nhất. Nếu mảng của bạn là lớn, và bạn đang tìm kiếm các buổi biểu diễn, thì đây có lẽ là cách đơn giản và nhanh nhất. – PEM

+0

Hi Pem, tôi đã sử dụng hệ thống này và nó hoạt động hoàn hảo. Cảm ơn Bạn chưa thử những người khác, nhưng cảm ơn mọi người – sugarFornaciari

+0

Cảm ơn bạn, đừng quên xác thực câu trả lời :) cảm ơn bạn Nhân tiện, nếu bạn muốn có ngày PEM

5

Sắp xếp mảng theo ngày, và sau đó nhận được giá trị trước của mảng.

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

+1 Với một sửa đổi, 'gần đây nhất' không thể là ngày trong tương lai hoặc một thứ gì đó khá đúng .. $ dates = array_filter ($ dates, function ($ val) {return strtotime ($ val) mschr

0

Dưới đây là gợi ý của tôi:

$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

Thats biến thể của tôi. Nó hoạt động với ngày trong tương lai.

$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

Sử dụng max(), array_map(), và strtotime().

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

Điều này đáng lẽ phải là câu trả lời. Đến nay là giải pháp dễ nhất so với phần còn lại của câu trả lời. –

1

Tôi tin rằng, sau đây là mã ngắn nhất để tìm ngày gần đây. bạn có thể thay đổi nó để tìm chỉ mục của ngày gần đây hoặc để tìm chỉ mục gần đây trong tương lai hoặc quá khứ.

$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

Hãy thử điều này:

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

Rafael, SO là một trang web nói tiếng Anh. Vui lòng đăng câu trả lời bằng tiếng Bồ Đào Nha cho các câu hỏi được yêu cầu tại http://pt.stackoverflow.com/. :) –

+1

Câu trả lời của bạn luôn trả về ngày "tối đa", không phải là ngày tối đa sớm hơn ngày hôm nay. Bạn cần dòng sau trước khi bạn thêm vào mảng $ newDates của mình: if (strtotime ($ data)

+0

Nhưng "hôm nay" có thể được xem là " ngày gần đây nhất, so với ngày hôm nay ". Trong trường hợp này tôi không thấy bất kỳ vấn đề nào với câu trả lời của anh ấy. –

-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

Hãy thử làm việc này 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

Thật tuyệt, nhưng hãy quan tâm để giải thích mã của bạn làm gì? – Machavity

+0

đã được đề cập trong câu trả lời @ flowfree tôi nghĩ – reverbnation

Các vấn đề liên quan