PHP ярлык, чтобы найти наименьшее число / дату - PullRequest
2 голосов
/ 30 марта 2011

У меня возникла ситуация, когда была создана серия из 15 дат, в настоящее время в метках времени UNIX.

Другая переменная <?php $dateidate = date(strtotime('+20 days')); ?>

Цель состоит в том, чтобы найти наименьшую из 15 других дат, которая больше >, чем $ dateidate, и отобразить в формате 'd-m-Y'

Как только мы это сделаем, есть способ получить второе наименьшее из 15 других дат, которое больше >, чем $dateidate, и отобразить в формате 'd-m-Y'.

Ответы [ 3 ]

1 голос
/ 30 марта 2011

Это решение фильтрует массив $dates, в котором хранятся метки времени, используя анонимную функцию , поэтому в массиве $shorterOnes будут все метки времени, которые больше $dateidate.

Тогда массив будет отсортирован , первый будет наименьшим и т. Д.

$dateidate=strtotime('+20 days');
$dates=array(/*timestamps*/);

$shorterOnes=array_filter($dates, function ($v) use ($dateidate) {
  return $v>$dateidate;
});

sort($shorterOnes);

echo date('d-m-Y', $shorterOnes[0]);
echo date('d-m-Y', $shorterOnes[1]);

Анонимные функции работают только из PHP 5.3. Ниже этого значения вам нужно использовать create_function () .

1 голос
/ 30 марта 2011

Итак, у вас есть 15 дат, которые являются метками времени UNIX. Полезно.

Хорошо, вот что вы можете сделать, чтобы сделать это легко:

$datearray = array(timestamp1,timestamp2,etc.) // an array of timestamps
$dateidate = time() + 1728000; //current time + 20 days worth of seconds (20 * 24 * 60 * 60)

foreach($datearray as $key => $date)
{
    if($date < $dateidate)
    {
        unset $datearray[$key];  //Remove timestamp from original array if less than $dateidate
    }
}

$earliestdate = min($datearray); 
//min returns the least of the values in the array, opposite of max, which you could use to find the latest date in the array

$date = date('d-m-Y',$earliestdate);
1 голос
/ 30 марта 2011

strtotime генерирует временную метку.вместо этого:

<?php $dateidate = date(strtotime('+20 days')); ?>

сделать это:

<?php $dateidate = strtotime('+20 days'); ?>

Поместите все временные метки в массив с помощью специальных клавиш, так что вы можете определить, какой из них ваш стержень.Сортируйте этот массив и делайте то, что вам нужно, с отсортированным массивом.

...