あなたが持っている配列から始めましょう:
$values = array("500", "1100", "1700", "2300");
必要なのは、有効な時間文字列にフォーマットすることです。これは簡単です。正しい位置に「:」を挿入するだけです。そのために、関数を作成しました:
function Format($str)
{
$length = strlen($str);
return substr($str, 0, $length - 2).':'.substr($str, $length - 2);
}
これで、 strtotimeを使用して UNIX 時間に変換できる有効な文字列を取得できます。ここでの問題は、現在の時刻に近いものを見つけることです (これはtimeで得られます) 。
したがって、配列を反復処理して変換し、現在の時刻との差を (絶対値で) 計算して、より小さな数値になるものを選択できます。コードは次のとおりです。
$now = time(); //current time
$best = false;
$bestDiff = 0;
for ($index = 0; $index < count($values); $index++)
{
$diff = abs($now - strtotime(Format($values[$index])));
if ($best === false || $diff < $bestDiff)
{
$best = $index;
$bestDiff = $diff;
}
}
近い時刻のインデックスを に$best
、計算の瞬間との差をに残し$bestDiff
ます。これはすべて、これらの時間が同じ日と現地時間であると仮定していることに注意してください。