Arun Kumar
Arun Kumar

Reputation: 1667

PHP sum two different minutes

i have two different break time

  1. default break time
  2. extra break time

here i want to sum of two times and display 12 hrs format

EX :

$default_time = "00:30";
 $extra_time   = "00:25";

my expected output : 00:55

but now display 01:00

this is my code

$default_time = $work_data->break_time;
$break_time =  $work_data->extra_time;
$total_break = strtotime($default_time)+strtotime($break_time);
echo date("h:i",strtotime($total_break));

Upvotes: 0

Views: 1492

Answers (8)

Phil Allen
Phil Allen

Reputation: 81

You could try the following:

$default_time = $work_data->break_time;
$date_start = new DateTime($default_time);
$break_time =  $work_data->extra_time;
$interval = new DateInterval("PT" . str_replace(":", "H", $break_time) . "M");
$date_end = $date_start->add($interval);
echo $date_end->format("H:i");

Note that this doesn't account for times which span a 24 hour period

Upvotes: 0

dekts
dekts

Reputation: 830

Use below code you will definitely get your answers.

$default_time = "00:30:00";
$extra_time = "00:25:00";

$secs = strtotime($extra_time)-strtotime("00:00:00");
$result = date("H:i:s A",strtotime($default_time)+$secs);
echo $result;die;

You can modify above code as per your need.

Upvotes: 0

Bilal Ahmed
Bilal Ahmed

Reputation: 4076

<?php
    $time = "00:30";
    $time2 = "00:25";

    $secs = strtotime($time2)-strtotime("00:00:00");
    $result = date("H:i:s",strtotime($time)+$secs);
    print_r($result);
?>

Upvotes: 0

caylee
caylee

Reputation: 941

You could try the following code fragment:

$time1 = explode(":", $default_time);
$time2 = explode(":", $break_time);
$fulltime = ($time1[0] + $time2[0]) * 60 + $time1[1] + $time2[1];
echo (int)($fulltime / 60) . ":" . ($fulltime % 60);

Upvotes: 0

Sergei Kasatkin
Sergei Kasatkin

Reputation: 385

Consider using standard DateTime and DateInterval classes. All you will need is to convert your second variable value to interval_spec format (see http://php.net/manual/en/dateinterval.construct.php for details):

$defaultTime = "00:30";
$breakTime = "PT00H25M"; // Or just 'PT25M'

$totalBreak = (new DateTime($defaultTime))->add($breakTime);
echo $totalBreak->format('H:i');

Upvotes: 0

JuhG
JuhG

Reputation: 138

The problem is that you're trying to add too specific timestamps, but what you're trying to achieve is adding two durations. So you need to convert those timestamps into durations. For that you need a base, which in your case is 00:00.

$base = strtotime("00:00");

$default_time = $work_data->break_time;
$default_timestamp = strtotime($default_time);
$default_duration = $default_timestamp - $base; // Duration in seconds

$break_time =  $work_data->extra_time;
$break_timestamp = strtotime($break_time);
$break_duration = $break_timestamp - $base; // Duration in seconds

$total_break = $default_duration + $break_duration; // 55 min in seconds

// If you want to calculate the timestamp 00:55, just add the base back to it
echo date("H:i", $base + $total_break);

Upvotes: 0

caylee
caylee

Reputation: 941

There is one function call to strtotime function too much.

You should leave out the strtotime() call in the last line, as $total_break already is a UNIX timestamp:

$total_break = strtotime($default_time)+strtotime($break_time);
echo date("h:i",$total_break);

Upvotes: 0

Noman
Noman

Reputation: 4116

Here is the function you can calculate total time by passing the arguments to functions.

$hours, $min are supposed variable which is zero

$default_time = "00:30";
$break_time   = "00:25";
function calculate_total_time() {
    $i = 0;
    foreach(func_get_args() as $time) {
        sscanf($time, '%d:%d', $hour, $min);
        $i += $hour * 60 + $min;
    }

    if( $h = floor($i / 60) ) {
        $i %= 60;
    }

    return sprintf('%02d:%02d', $h, $i);
}

// use example
echo calculate_total_time($default_time, $break_time); # 00:55

Upvotes: 2

Related Questions