只是想知道如何选择最接近的变量。 我有一套军事时间清单,即: 0030 0100 0130 0200 等...
全部以半小时为增量。我如何选择最接近的时间。 例如。 用户点击按钮,php获取现在的时间,并选择最接近的时间变量。因此,如果它是0144,它将选择0130.如果它是0146,它将选择0200。
答案 0 :(得分:3)
由于您始终以30分钟的间隔存储时间,因此从当前时间中减去最后2位数(分钟)。
例如: 如果当前时间是0146,
希望这有帮助。
答案 1 :(得分:0)
为方便起见,在计算中将它们视为整数,忽略前导零,因为它们对您的计算无用。
你有144,你想要向下舍入到130,或146,到200.同样,14(0014)将转到0(0000)和15(0015)到30。
简单如果/ thens足以完成此任务。
答案 2 :(得分:0)
我相信应该这样做:
function military_time() {
$hour = (int) date('G');
$minute = (int) date('i');
$rounded_minute = round($minute / 30);
switch ($rounded_minute) {
case 0:
$minute = '00';
break;
case 1:
$minute = '30';
break;
case 2:
$minute = '00';
$hour = (int) $hour + 1;
break;
}
// 2400 should become 0000
if ($hour > 23) $hour = 0;
// leading zero
if ($hour < 10) $hour = '0' . $hour;
return $hour . $minute;
}
echo military_time();
虽然可能会改进。
答案 3 :(得分:0)
你可以尝试
$times = array("0030","0100","0130","0200");
echo "<pre>";
echo militaryTime($times, "0020"), PHP_EOL;
echo militaryTime($times, "0050"), PHP_EOL;
echo militaryTime($times, "0144"), PHP_EOL;
echo militaryTime($times, "0146"), PHP_EOL;
echo militaryTime($times, "0220"), PHP_EOL;
输出
0030
0100
0130
0200
0200
使用的功能
function militaryTime($times, $selected) {
if (empty($times))
trigger_error("Empty array not supported ");
$times[] = $selected;
sort($times);
$position = array_search($selected, $times, true);
$current = DateTime::createFromFormat("Hi", $times[$position]);
$previous = isset($times[$position - 1]) ? DateTime::createFromFormat("Hi", $times[$position - 1]) : null;
$next = isset($times[$position + 1]) ? DateTime::createFromFormat("Hi", $times[$position + 1]) : null;
if ($previous != null && $next == null) {
return $previous->format("Hi");
}
if ($previous == null && $next != null) {
return $next->format("Hi");
}
$closest = ($current->diff($previous)->format("%i") - $current->diff($next)->format("%i") <= 0) ? $previous : $next;
return $closest->format("Hi");
}