Jump to content

Total The Hours - HELP!


ipwnzphp

Recommended Posts

I have a app that i am working on and it has got me a lil fired up this am!! lol. here is what i am trying to do.

 

My Issue

I am trying to get the total number of hours worked form the db by adding the start_time and the end_time together.

 

My Code Snippet

<?
$results = mysql_query("SELECT * FROM `simp_time_logger` WHERE p_id = '$id'") or die (mysql_error());
while ($rows = mysql_fetch_array($results)) {
$explode_time = explode(" ", $rows['start_time']);
$explode_time2 = explode(" ", $rows['end_time']);
$start =  $explode_time[0];
$end =  $explode_time2[0];
$time = $start + $end;
}
echo $time;
?>

 

My Error

Says the number of hours worked is 16, How can this be when the start time is 8:29:55 and the end time is 8:29:57

 

Now the time is stored in the db like this 8:29:55 AM i am using explode to break off the AM/PM form it. I just need it to read the rows of the table and then get the correct total of hours worked to display.

 

Any help will be greatly appreciated. Thanks!

Link to comment
https://forums.phpfreaks.com/topic/188051-total-the-hours-help/
Share on other sites

 

Convert to seconds do the math and convert back to HH:MM:SS.

 

 

<?php
function time_to_sec($time) {
    $hours = substr($time, 0, -6);
    $minutes = substr($time, -5, 2);
    $seconds = substr($time, -2);

    return $hours * 3600 + $minutes * 60 + $seconds;
}

function sec_to_time($seconds) {
    $hours = floor($seconds / 3600);
    $minutes = floor($seconds % 3600 / 60);
    $seconds = $seconds % 60;

    return sprintf("%d:%02d:%02d", $hours, $minutes, $seconds);
}
?>

Link to comment
https://forums.phpfreaks.com/topic/188051-total-the-hours-help/#findComment-992818
Share on other sites

How can this be when the start time is 8:29:55 and the end time is 8:29:57

 

It is because of how PHP handles strings (http://php.net/manual/en/language.types.string.php#language.types.string.conversion)

 

When you did

 

$time = $start + $end;

 

It converted both $start and $end to an integer (because of the + operand) resulting $start in 8 and $end in 8 which make your 16 total.

 

while ($row = mysql_fetch_array($results, MYSQL_ASSOC)) {
    $start = strtotime($row['start_time']);
    $end = strtotime($row['end_time']);
    $diff = $end - $start;
    $hours = floor($diff / 3600);
    $minutes = floor($diff % 3600 / 60);
    $seconds = $diff % 60;
    echo date('d M Y', $start), ' + ', date('H:m:s', mktime($hours, $minutes, $seconds)), ' = ', date('d M Y', $end);
}

 

Chances are this can be written a lot shorter.

Link to comment
https://forums.phpfreaks.com/topic/188051-total-the-hours-help/#findComment-992863
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.