Php 从数组列表中查找最近的时间
我在数组中查找两个值:Php 从数组列表中查找最近的时间,php,Php,我在数组中查找两个值: 从2013年8月29日08:00到2013年8月29日13:00的最后一个数组值 从2013年8月29日12:00到2013年8月29日17:00的第一个数组值 以下是阵列: $dates = array( '08/29/2013 08:00', '08/29/2013 08:10', '08/29/2013 08:11', '08/29/2013 12:20', '08/29/2013 12:21', '08/29/2
- 从2013年8月29日08:00到2013年8月29日13:00的最后一个数组值
- 从2013年8月29日12:00到2013年8月29日17:00的第一个数组值
$dates = array(
'08/29/2013 08:00',
'08/29/2013 08:10',
'08/29/2013 08:11',
'08/29/2013 12:20',
'08/29/2013 12:21',
'08/29/2013 12:21',
'08/29/2013 17:30',
); // etc.
您可以将所有字符串时间戳转换为长值(自1970年以来的毫秒)。然后只需计算相关值(例如大于08/29/2013 08:00)与上限(例如08/29/2013 13:00)的差值。最小的增量最接近上限。最大的三角洲最远
这是计算自历元起秒数的方法:您可以将所有字符串时间戳转换为长值(自历元起的毫秒数)。然后只需计算相关值(例如大于08/29/2013 08:00)与上限(例如08/29/2013 13:00)的差值。最小的增量最接近上限。最大的三角洲最远 这是计算自历元起秒数的方法:
$nearest=$dates[0];
$now=时间();
对于($i=0;$i$nearest=$dates[0];
$now=时间();
对于($i=0;$i
比较时间的最佳方法之一是使用strotime()
将字符串转换为时间
这里有一个神奇之处——一些非常简单的函数返回数组中最接近的日期(或第一个条目),以及最接近的日期(或最后一个条目)
function dateBefore($date, $dateArray){
$prev = $dateArray[0];
foreach( $dateArray as $d ){
if( $d >= $date )
return date("Y-m-d H:i", $prev);
$prev = $d;
}
}
function dateAfter($date, $dateArray){
foreach( $dateArray as $d ){
if( $d > $date )
return date("Y-m-d H:i", $d);
}
return date("Y-m-d H:i", end($dateArray));
}
echo dateBefore($date_last1, $dates_dt); // Outputs: 2013-08-29 08:00
echo dateBefore($date_last2, $dates_dt); // Outputs: 2013-08-29 12:21
echo dateAfter($date_first1, $dates_dt); // Outputs: 2013-08-29 12:20
echo dateAfter($date_first2, $dates_dt); // Outputs: 2013-08-29 17:30
注意
对时间数组进行排序可能也是一个好主意,这样它们就可以确定顺序了
foreach($dates as $date)
$dates_dt[] = strtotime($date);
// Add sort here
sort($dates_dt);
比较时间的最佳方法之一是使用strotime()
将字符串转换为时间
这里有一个神奇之处——一些非常简单的函数返回数组中最接近的日期(或第一个条目),以及最接近的日期(或最后一个条目)
function dateBefore($date, $dateArray){
$prev = $dateArray[0];
foreach( $dateArray as $d ){
if( $d >= $date )
return date("Y-m-d H:i", $prev);
$prev = $d;
}
}
function dateAfter($date, $dateArray){
foreach( $dateArray as $d ){
if( $d > $date )
return date("Y-m-d H:i", $d);
}
return date("Y-m-d H:i", end($dateArray));
}
echo dateBefore($date_last1, $dates_dt); // Outputs: 2013-08-29 08:00
echo dateBefore($date_last2, $dates_dt); // Outputs: 2013-08-29 12:21
echo dateAfter($date_first1, $dates_dt); // Outputs: 2013-08-29 12:20
echo dateAfter($date_first2, $dates_dt); // Outputs: 2013-08-29 17:30
注意
对时间数组进行排序可能也是一个好主意,这样它们就可以确定顺序了
foreach($dates as $date)
$dates_dt[] = strtotime($date);
// Add sort here
sort($dates_dt);
顺便说一句,最后一个条目不需要逗号。数组中会有多天吗?@Fred-ii-:放置它是一个很好的做法there@zerkms我已经见过很多次了,在最后一个条目中使用逗号会造成巨大的破坏。现在我真的很困惑。有点像“如果我不做就该死,如果我做了就该死”。它是可选的,就像讽刺一样:-)最后一个条目顺便说一句,不需要逗号。数组中会有多天吗?@Fred-ii-:放置它是一个很好的做法there@zerkms我已经见过很多次了,在最后一个条目中使用逗号会造成巨大的破坏。现在我真的很困惑。有点像“如果我不做,那就糟了,如果我做了,那就糟了”。它是可选的,就像讽刺一样:-)