Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从数组列表中查找最近的时间_Php - Fatal编程技术网

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我已经见过很多次了,在最后一个条目中使用逗号会造成巨大的破坏。现在我真的很困惑。有点像“如果我不做,那就糟了,如果我做了,那就糟了”。它是可选的,就像讽刺一样:-)