2012-06-13 11 views
14

tengo el conjunto de las fechas a continuaciónObtener la fecha más reciente de una serie de fechas

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

y me gustaría saber la fecha más reciente como en: el más cercano a la fecha de hoy.

¿Cómo puedo hacer eso?

Respuesta

18

Realice un ciclo, convierta los valores a la fecha y almacene los más recientes, en una var.

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

algo así ... se entiende la idea Si desea más reciente antes de hoy:

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

conversión de fechas para las marcas de tiempo para que tenga enteros. entonces es una comparación int simple, más grande = más reciente. Si su matriz es grande y está buscando actuaciones, entonces esta es probablemente la forma más simple y rápida. – PEM

+0

Hola, Pem, utilicé este sistema y funciona perfectamente. Gracias No he probado los otros, pero gracias a todos chicos – sugarFornaciari

+0

Gracias, no olvides validar la respuesta :) gracias Por cierto, si quieres una fecha PEM

5

ordenar la matriz por fecha, y luego obtener el valor anterior de la matriz.

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

+1 Con una modificación, 'más reciente' no puede ser una fecha futura o algo no muy correcto ... $ fechas = array_filter ($ fechas, función ($ val) {return strtotime ($ val) mschr

0

Aquí está mi sugerencia:

$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

Ésta es mi variante. Funciona con fecha en el futuro.

$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

Uso max(), array_map() y strtotime().

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

Esto debería haber sido la respuesta. Con mucho, la solución más fácil en comparación con el resto de las respuestas. –

1

Creo que lo que sigue es el código más corto para encontrar la fecha reciente. Puede modificarlo para encontrar el índice de la fecha reciente o para encontrar el reciente en el futuro o en el pasado.

$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

Prueba esto:

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

Rafael, SO es un sitio de habla inglesa. Por favor, publique las respuestas en portugués para las preguntas formuladas en http://pt.stackoverflow.com/. :) –

+1

Su respuesta siempre devuelve la fecha 'máxima', no el máximo de fechas que son anteriores a hoy. Necesita la siguiente línea antes de agregar a su matriz $ newDates: if (strtotime ($ data)

+0

Pero "hoy" se puede ver perfectamente como "el fecha más reciente, en comparación con hoy ". En este caso, no veo ningún problema con su respuesta. –

-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

probar este funciona al 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

Eso es bueno, pero ¿te importa explicar lo que hace tu código? – Machavity

+0

ya está cubierto en la respuesta de @ flowfree, creo – reverbnation

Cuestiones relacionadas