php获取最接近的时间戳但小于当前时间戳

时间:2016-02-19 08:59:22

标签: php arrays date timestamp

我在数组中使用时间戳作为值,例如:

  • 1455874500:19/02/2016 09h35
  • 1455879600:19/02/2016 11h00
  • 1455921300:19/02/2016 22h35

我想要做的是从我的阵列BUT获得最接近的时间戳,如果此时间戳高于当前时间戳(最接近的>当前时间戳),则得到较低的值。

这是一个例子来说明我的观点,它是19/02/2016 10h58,我不想得到1455879600(19/02/2016 11h00)但是1455874500(19/02/2016 09h35)然后,当它是19/02/2016 11h00,得到1455879600。

我一直在研究这段代码:

function find_closest($id, $date_now){
    global $cnx;
    $sql = "select position_history from worksheets WHERE id = $id LIMIT 1";

    $stmt = $cnx->prepare($sql);
    try {
        $stmt->execute();
        $result = $stmt->fetch(PDO::FETCH_OBJ);
    }
    catch (PDOException $e) {
        echo $e->getMessage();
    }

    $pos_lane = unserialize($result->position_history);

    $i=0;

    $array = array();

    foreach ($pos_lane as $item) {
        // $exp[2] : timestamp
        $exp = explode("|", $pos_lane[$i]);
        $array[$exp[1]] = $exp[2];
        $i++;
    }

    $mostrecent = "0";
    foreach($array as $timestampmove)
    {
          if ($timestampmove > $mostrecent && $timestampmove < $date_now) {
             $mostrecent = $timestampmove;
          }
    }

    $closeto = array_search($mostrecent,$array);

    return $closeto;

}

目的是在今天之前选择最新的时间戳,但它似乎并不像我想的那样工作......

也许你有更好的解决方案?

谢谢你!

2 个答案:

答案 0 :(得分:1)

为什么不让它更简单并让原始的sql查询为你工作?

 $sql = "select MAX(position_history) from worksheets WHERE id = $id and position_history < now() LIMIT 1";

答案 1 :(得分:0)

您可以尝试以下方法:

foreach ($pos_lane as $item) {
    // $exp[2] : timestamp
    $exp = explode("|", $pos_lane[$i]);
    $array[$exp[1]] = (int) $exp[2];   // <<< cast to int
    $i++;
}

$mostrecent = 0;
$closeto = null;
foreach($array as $key => $timestampmove)
{
    if ($timestampmove < $date_now) {  // <<< make sure $date_now is a Unix timestamp
        if ($mostrecent < $timestampmove) {
            $mostrecent = $timestampmove;
            $closeto = $key;
        }
    }
}

return $closeto;