0

standard function: ( see on codepad )

<?php

$start_time_o = "18:00";
$end_time_o = date("H:i");

function get_time_difference(){

    global $start_time_o, $end_time_o;

    $start_time = explode(":", $start_time_o);
    $end_time = explode(":", $end_time_o);

    $start_time_stamp = mktime($start_time[0], $start_time[1], 0, 0, 0, 0);
    $end_time_stamp = mktime($end_time[0], $end_time[1], 0, 0, 0, 0);

    $time_difference = $end_time_stamp - $start_time_stamp;

    return gmdate("H:i", $time_difference); 
}

echo get_time_difference();

?>

modified function: ( see on codepad )

<?php

$start_time_o = "18:00:01";
$end_time_o = date("H:i:s");

function get_time_difference(){

    global $start_time_o, $end_time_o;

    $start_time = explode(":", $start_time_o);
    $end_time = explode(":", $end_time_o);

    $start_time_stamp = mktime($start_time[0], $start_time[1], $start_time[2], 0, 0, 0, 0);
    $end_time_stamp = mktime($end_time[0], $end_time[1], $end_time[2], 0, 0, 0, 0);

    $time_difference = $end_time_stamp - $start_time_stamp;

    return gmdate("H:i:s", $time_difference); 
}

echo get_time_difference();

?>

the first function works without any errors or notices.

the modified function gives the message:

Deprecated: mktime(): The is_dst parameter is deprecated in C:\xampp\htdocs\index.php on line 13
Deprecated: mktime(): The is_dst parameter is deprecated in C:\xampp\htdocs\index.php on line 14

i don't know why i receive the message only at the modified function? what's wrong in here?

John Conde
  • 217,595
  • 99
  • 455
  • 496
bernte
  • 1,184
  • 2
  • 19
  • 34

3 Answers3

3

use strtotime

like

$someString = '10/10/2012 4:34 pm';  
date_default_timezone_set('American/New_York');
$timestamp = strtotime($someString);
echo date('Y/m/d H:i:s', $timestamp);
NullPoiиteя
  • 56,591
  • 22
  • 125
  • 143
3

If you wanted to use a simpler way to do this try using DateTime::diff

<?php
$datetime1 = new DateTime('18:00:01');
$datetime2 = new DateTime();
$interval = $datetime1->diff($datetime2);
echo $interval->format('H:i:s');
?>

Here it is as a function which may make it easier for you to use:

<?php
function diff($first_datetime, $second_datetime = "now")
{
    $datetime1 = new DateTime($first_datetime);
    $datetime2 = new DateTime($second_datetime);
    $interval = $datetime1->diff($datetime2);
    return $interval->format('H:i:s');
}

// One of the date/time parameters is now so 
// we only  have to pass one parameter
echo diff('18:00:01');

// Neither parameter is now
echo diff('18:00:01', '20:00:00');
?>
John Conde
  • 217,595
  • 99
  • 455
  • 496
2

You are using one too many arguments on the mktime() function. Remove one of the zeros, like this:

$start_time_stamp = mktime($start_time[0], $start_time[1], $start_time[2], 0, 0, 0);
$end_time_stamp = mktime($end_time[0], $end_time[1], $end_time[2], 0, 0, 0);

This is what is causing your issue, however as @NullPointer has pointed out in his answer, there is a much more efficient and better way to achieve this. Use his solution!

Ben Carey
  • 16,540
  • 19
  • 87
  • 169