我有两个时间戳,并试图将持续时间分组为持续时间的相等间隔。
2013-08-02 00:00:12 to 2013-08-02 00:58:50
例如,15秒的间隔应该给我以下信息:
2013-08-02 00:00:00
2013-08-02 00:00:15
2013-08-02 00:00:30
2013-08-02 00:00:45
2013-08-02 00:01:00
....// and so on...
2013-08-02 00:58:45
目前我正在使用我创建的这个功能,它运行得很好,但速度非常慢:
function time_active_calculator($from_date, $to_date, $interval) {
$unix_from_date = strtotime($from_date);
$unix_to_date = strtotime($to_date);
$start_time_minute = floor($unix_from_date / 60) * 60;
$end_time_minute = ceil($unix_to_date / 60) * 60;
$valid_times = array();
while ($start_time_minute <= $end_time_minute) {
if (($start_time_minute <= $unix_to_date)) {
if ($start_time_minute + $interval > $unix_from_date) {
$valid_times[] = $start_time_minute;
}
}
$start_time_minute = $start_time_minute + $interval;
}
return $valid_times; }
现在的想法是只获取开始和结束的间隔,并使用$interval作为步长。我只需要找到开始时间和结束时间戳的正确间隔值即:
2013-08-02 00:00:00 and 2013-08-02 00:58:45
然后对其使用范围函数。
你可以这样尝试-
function time_active_calculator($from_date, $to_date, $interval) {
$dateFrom = new DateTime($from_date);
$dateTo = new DateTime($to_date);
while ($dateFrom <= $dateTo) {
$dateFrom->add(new DateInterval('PT$intervalS'));
$valid_times[] = $dateFrom->format('Y-m-d H:i:s');
$dateFrom = new DateTime($dateFrom->format('Y-m-d H:i:s'));
}
return $valid_times;
}
您需要根据您的要求更改DateInterval()
参数。如果要添加秒数,则应为PT$intervalS
,如果小于PT$intervalM
。