CyberJunkie
CyberJunkie

Reputation: 22684

php replacing old code with DateTime class

I have a function that creates time intervals between two time marks. The function works but I'm struggling to upgrade from strtotime() and use the DateTime class.

Below is a patch of code I wrote without getting errors

$timestart = new DateTime("14:00:00");
$timestop = new DateTime("20:00:00");
$date_diff = $timestop->diff($timestart);
$time_diff = $date_diff->format('%H');

Next is the entire code untouched. I get DateInterval could not be converted to int erros using the code above. Please kindly advise how to correctly implement the class.

Live example: http://codepad.org/jSFUxAnp

function timemarks() 
    {       

        //times are actually retrieved from db
        $timestart = strtotime("14:00:00");
        $timestop = strtotime("20:00:00");

        $time_diff = $timestop - $timestart; //time difference

        //if time difference equals negative value, it means that $timestop ends second day 
        if ($time_diff <= 0) 
        {
            $timestop = strtotime( '+1 day' , strtotime( $row->timestop ) ); //add 1 day and change the timetsamp
            $time_diff = $timestop - $timestart;
        }

        //create interval
        $split = 3;
        $interval = $time_diff/$split;

        //get all timemarks
        $half_interval = $interval / 2;
        $mid = $timestart + $half_interval;     
        for ( $i = 1; $i < $split; $i ++) {
            //round intervals   
            $round_mid = round($mid / (15 * 60)) * (15 * 60);
            $result .= date('H:i:s', $round_mid) . ", ";
            $mid += $interval;
        }       
        $round_mid = round($mid / (15 * 60)) * (15 * 60);
        $result .= date('H:i:s', $round_mid);

        return $result;
    } 

outputs 15:00:00, 17:00:00, 19:00:00

Upvotes: 1

Views: 262

Answers (1)

dan-lee
dan-lee

Reputation: 14502

Actually you're using DateTime, these are just aliases for creating DateTime instances

The equivalent would look like this:

$timestart = new DateTime("14:00:00");
$timestop = new DateTime("20:00:00");
$date_diff = $timestop->diff($timestart);
$time_diff = $date_diff->format('%H');

So this has to work, I tested it and I got correct results!

Upvotes: 2

Related Questions