2011-03-30 34 views
2

我有一种情况,一系列的15个日期已经创建,目前在UNIX时间戳中。找到最小数字/日期的PHP快捷方式

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

的目标是找到最小的其他15个日期比在'd-m-Y'

格式为$ dateidate和显示更大>的。一旦我们做到了这一点是有一个获得其他15个日期中排在第二小于>的第二小于$dateidate,并以'd-m-Y'的格式显示。

+0

时间戳很容易被分类为以整数数组,然后比较新的日期。 – AJJ 2011-03-30 15:45:44

回答

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); 
1

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

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

做到这一点:

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

把所有的时间标记与特殊功能键的排列,所以你可以区分哪一个是你的支点。 对该数组进行排序,并执行您需要对排序数组执行的操作。

+0

问题是我不确定如何去做我想要做的事情。我从时间上得到了他们的时间戳。它的排序和计算我不确定 – 2011-03-30 15:43:50

+0

时间戳是整数,秒更精确。所以更大的日期是一个更大的时间戳。例如1.1.2011的结果是比1.2.2011更小的时间戳。 – ITroubs 2011-03-30 15:45:33

+0

仍然不知道如何从数组中找到高于$ dateidate的值。我想我想把它们放在一个数组中查找大于$ dateidate的值,然后找到min()。但我不知道如何做第一位,也不知道如何找到第二个最小的 – 2011-03-30 15:53:05

1

该解决方案过滤$dates阵列使用anonymous function,所以$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()