找到2个时间戳的相等间隔

时间:2013-11-19 11:25:55

标签: php function datetime math logic

我有两个时间戳,并尝试将持续时间分组为等间隔。

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并将$ interval作为步骤。我只需要找到开始时间和结束时间戳的正确间隔值 即:

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

然后使用范围功能。

1 个答案:

答案 0 :(得分:0)

你可以这样试试 -

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