Domanda

I have a website where users enter data including hours, for example they enter '1:00' (Meaning = 1 hour) and '00:15' (Meaning = 15 minutes) and '2:30' (Meaning = 2 hour and 30 minutes).

Now I need to make show them how many hours they have entered in total, when I calculate it by just doing $count += $time in a loop I am getting the correct number but not what is standing after the ':'.

1:00 + 00:15 + 2:30 will become '3' while it should be 3:45.

How would I do this? Also now that I am thinking about it, I will also need if it goes over 60 it adds 1 to the first number (A new hour).

Thanks.

È stato utile?

Soluzione

First, calculates minutes, then calculate how many hours are those minutes and add them to the hours:

<?php foreach ($data as $entry) {
  list($hour, $minutes) = explode(':', $entry);
  $total_hours += $hour;
  $total_minutes += $minutes;
}
$hours_from_minutes = floor($total_minutes / 60);
$total_hours += $hours_from_minutes;
$total_minutes -= $hours_from_minutes * 60;
echo "$total_hours:$total_minutes"

Altri suggerimenti

A simple solution that supports everything varying from 00:00:00 to just 00:00 and 00

$times = ['00:15', '01:00:13', '24:43:12', '00:00:34'];
$total_seconds = 0;
$total_minutes = 0;
$total_hours   = 0;
foreach ($times as $time) {
    $array = explode(':', $time);
    switch (sizeof($array)) {
        case 3:
            $total_seconds += (int) $array[2];
        case 2:
            $total_minutes += (int) $array[1];
        case 1:
            $total_hours   += (int) $array[0];
            break;
        default:
            throw new Exception('got more than expected!');
        }
    }

$total_minutes += floor($total_seconds / 60);
$total_seconds %= 60;

$total_hours += floor($total_minutes / 60);
$total_minutes %= 60;

printf('%dh %dm %ds', $total_hours, $total_minutes, $total_seconds);

// upd coz strtotime is not for this Q

Try to use DateIntervals, they may help you.
http://php.net/manual/ru/class.dateinterval.php

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top