用于查找最小数字/日期的PHP快捷方式

时间:2011-03-30 15:39:56

标签: php arrays math date timestamp

我有一种情况,即创建了一系列15个日期,目前在UNIX时间戳中。

另一个变量<?php $dateidate = date(strtotime('+20 days')); ?>

目标是找到比$ dateidate更大>的其他15个日期中最小的日期,并以'd-m-Y'

的格式显示

我们完成后,有一种方法可以获得比>更大{15}的其他15个日期中的第二个,并以$dateidate的格式显示。< / p>

3 个答案:

答案 0 :(得分:1)

strtotime生成时间戳。 而不是这个:

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

这样做:

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

将所有时间戳放入具有特殊键的数组中,以便区分哪一个是您的支点。 对该数组进行排序,并对排序数组执行所需操作。

答案 1 :(得分:1)

此解决方案使用anonymous function过滤存储时间戳的$dates数组,因此在$shorterOnes数组中,您将拥有大于$dateidate的所有时间戳。

然后数组为sorted,第一个数组最小,依此类推。

$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()

答案 2 :(得分:1)

因此,您有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);