问题描述对不起大家,整天加班我说清楚下需求,前端传给我的是一个unix时间戳,我需要由时间戳,得到这个时间戳所在的时间区间,因为我要处理这个参数作为时间间隔,用来搜索日志,因为日志那里的前端时间间隔是5分钟一个间隔,比如2019-4-13 12:00 - 2019-4-13 12:05,2019-4-13 11:10 - 2019-4-13 11:15这样的时间间隔的下拉框,所以前端请求这个接口也需要这样格式的时间,我负责后端处理这个搜索参数,因此需要把前端的时间转换为该时间在哪个时间间隔内,问题已经解决,谢谢大家
问题出现的环境背景及自己尝试过哪些方法
相关代码
这是我的代码
<?php
function parse_time_range($time)
{
$date = date('Y-m-d', $time);
$start_hour = date('H', $time);
$end_hour = date('H', $time);
$minute = date('i', $time);
$second = date('s', $time);
$start_min = $minute;
$end_min = $minute;
if ($minute % 5 == 0) {
$start_min = $minute - 5;
$end_min = $minute + 5;
if ($start_min <= 0) {
$start_min = 55;
$start_hour--;
}
if ($end_min >= 60) {
$end_hour++;
$end_min = 0;
}
} else {
while ($start_min % 5 != 0) {
$start_min--;
if ($start_min <= 0) {
$start_min = 55;
$start_hour--;
break;
}
}
while ($end_min % 5 != 0) {
$end_min++;
if ($end_min >= 60) {
$end_hour++;
$end_min = 0;
break;
}
}
}
$time_range['start'] = sprintf('%s %02d:%02d:%02d', $date, $start_hour, $start_min, 0);
$time_range['end'] = sprintf('%s %02d:%02d:%02d', $date, $end_hour, $end_min, 0);
return $time_range;
}
$strtime = '2019-12-09 12:00:59';
$time = strtotime($strtime);
$result = parse_time_range($time);
print_r($result);
快速实现依赖于 Carbon 包,foreach 中可以优化,换成
二分查找法
。