2013-11-19 4 views
0

У меня есть две метки времени и попытка группировать продолжительность в равные интервалы на время.Поиск равных интервалов из 2 временных меток

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; } 

Идея состоит в том, чтобы получить интервалы только для начала и конца и использовать range с интервалом в $, являющимся шагом. Мне нужно найти только значения правильных интервалов для времени начала и конца метки времени т.е:

2013-08-02 00:00:00 and 2013-08-02 00:58:45 

, а затем использовать функцию диапазона на нем.

ответ

0

Вы можете попробовать как this-

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, если minuts чем PT$intervalM.

+0

Это всего лишь добавляет 15 секунд к любой отметке времени. Я хочу, чтобы минута разделилась на 4 из 15 секунд каждый, и любая временная метка должна дать предыдущий интервал, например: 00:00:17 должен вернуться 00:00:15 –

+0

@JCrow: см. Мой пост. –

Смежные вопросы