Rekenen met tijden

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Trinco ingels

trinco ingels

10/04/2012 11:31:15
Quote Anchor link
Goedemorgen,

Ik heb een script wat rekent met tijden.
Dus er staan een tal van tijden in de database bv: 2:30, 4:45, 8:15, 3:45

Die worden dan opgeteld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
$time = date("H.i", strtotime($prodrow['totaal']));
                                            $time = ((int)$time) * 60 + ($time - ((int)$time)) * 100;

                                            if ($timetotal == null)
                                            {
                                                $timetotal = date("H.i", strtotime("00:00"));
                                            }

                                            $timetotal += $time;
                                            $hours = date("i", $timetotal);
                                            $minutes = date("s", $timetotal);


en komt er een totaal op het scherm. Echter na 60 uur gewerkt te hebben begint hij weer op 0...

zie de volgende echo die ik naar het scherm schrijf:
04:00
10:30
14:15
22:00
24:45
32:30
36:15
44:45
49:15
53:45
03:30

Hij moet doortellen en op een totaal van 63:30 komen hoe doe ik dit ?
Gewijzigd op 10/04/2012 11:31:55 door Trinco ingels
 
PHP hulp

PHP hulp

22/12/2024 09:20:43
 
- SanThe -

- SanThe -

10/04/2012 12:09:24
Quote Anchor link
Geef de juiste relevante code.
 
Trinco ingels

trinco ingels

10/04/2012 12:16:22
Quote Anchor link
Dit is heel mijn code maar of je dat helemaal nodig hebt?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php
                                    if(isset($_POST['submit2']))
                                        {

                                        
                                        }

                                    if ($_SERVER['REQUEST_METHOD'] == 'POST')
                                    {

                                        $date1 = date('Y-m-d', strtotime($_POST['datumvan']));
                                        $date2 = date('Y-m-d', strtotime($_POST['datumtot']));
                                        $prodcatsql = "SELECT * FROM uren WHERE datum BETWEEN '".$date1."' AND '".$date2."' AND ingevuld_door = '".$_SESSION['sid']."'ORDER BY datum";
                                    }

                                    elseif(!isset($_GET['actie']) == 'verzenden')
                                    {

                                        $prodcatsql = "SELECT * FROM uren WHERE ingevuld_door = '".$_SESSION['sid']."' ORDER BY datum ";
                                    }

                                    $prodcatres = mysql_query($prodcatsql);
                                    $numrows = mysql_num_rows($prodcatres);
                                    $id = "";
                                    if (!$numrows == 0)
                                    {

                                        while ($prodrow = mysql_fetch_array($prodcatres))
                                        {

                                            $vakken_array[] = $prodrow['id'];
                                            $id = $prodrow['id'];
                                            $date =  date("d-m-Y", strtotime($prodrow['datum']));
                                            $begin =  date("H:i", strtotime($prodrow['begin']));
                                            $eind =  date("H:i", strtotime($prodrow['eind']));
                                            $totaal = date("H:i", strtotime($prodrow['totaal']));
                                            $ingevuld_op = $prodrow['ingevuld_op'];
                                            $dagen = array("Maandag" => "Monday", "Dinsdag" => "Tuesday", "Woensdag" =>
                                                "Wednesday", "Donderdag" => "Thursday", "Vrijdag" => "Friday", "Zaterdag" =>
                                                "Saturday", "Zondag" => "Sunday");
                                            $dt = strtotime($prodrow['datum']);
                                            $dt = date("l", $dt);
                
                                            while ($day = current($dagen))
                                            {

                                                if ($day == $dt)
                                                {

                                                    $day1 = key($dagen) . '<br />';
                                                }

                                                next($dagen);
                                            }

                
                                            $time = date("H.i", strtotime($prodrow['totaal']));
                                            $time = ((int)$time) * 60 + ($time - ((int)$time)) * 100;

                                            if ($timetotal == null)
                                            {

                                                $timetotal = date("H.i", strtotime("00:00"));
                                            }


                                            $timetotal += $time;
                                            $hours = date("i", $timetotal);
                                            $minutes = date("s", $timetotal);
                                            $dayhour = date("g", strtotime($prodrow['totaal']));
                                            $daymin = date("i", strtotime($prodrow['totaal']));
                                            echo $hours . ':'.$minutes. '<br>';
                                            
                                            echo "<tr>";
                                            echo "<td><input type=\"checkbox\" class=\"checkbox\" name=\"id[]\" value=".$id." /></td>";
                                            echo "<td>". $day1 ."</td>";
                                            echo "<td>".  $date;
                                            echo "<td>" . $begin . " - " . $eind . "</td>";
                                            echo "<td>" . $totaal. "</td>";
                                            echo "<td>" . ucfirst($prodrow['werkgever']). "</td>";
                                            echo "<td>" . ucfirst($prodrow['werkzaamheid']). "</td>";
                                            ?>
  
                                            <td>
                                                <a href="edituur.php?edit&id=<?=$id?>"><img src="images/ico_edit_16.png" class="icon16 fl-space2" alt="" title="wijzigen" /></a>
                                                <a href="delete.php?delete&id=<?=$id?>" onClick="if(confirm('Weet je het zeker?'))this.href='delete.php?delete&id=<?=$id?>'; else this.href=''"><img src="images/ico_delete_16.png" class="icon16 fl-space2" alt="" title="verwijderen" /></a>
                                            </td>
                                            <?
                                            echo "</td>";
                                            echo "</tr>";
            
                                        }

                                        echo "<tfoot><tr>";
                                        echo "<th style=\"text-align:right\" colspan=\"4\">Totaal:</b></th>            
                                                <th><i>"
. $hours . ":" . $minutes ."</i></th>
                                                <th></th>
                                                <th></th>

                                                <th></th>"
;
echo "</tr></td></tr></tfoot>";

}

                
?>
 
Erwin H

Erwin H

10/04/2012 12:16:52
Quote Anchor link
Volgens mij zit het probleem gewoon hierin: $minutes = date("s", $timetotal);
In een normale datum/tijd kan het aantal minuten nooit boven de 60 (of eigenlijk zelfs 59) uitkomen. Als je dus het totaal aantal minuten wilt laten zien zal je moeten afstappen van het gebruik van date functies en gewoon met integers gaan werken.
 
Trinco ingels

trinco ingels

10/04/2012 12:42:07
Quote Anchor link
Erwin H op 10/04/2012 12:16:52:
Volgens mij zit het probleem gewoon hierin: $minutes = date("s", $timetotal);
In een normale datum/tijd kan het aantal minuten nooit boven de 60 (of eigenlijk zelfs 59) uitkomen. Als je dus het totaal aantal minuten wilt laten zien zal je moeten afstappen van het gebruik van date functies en gewoon met integers gaan werken.


Erwin het zit hem erin dat de minuten wel opgeteld worden.
dus zoals ik aangaf heb ik 53:45 en daar komt dan 9:45 bij dan zou je zeggen dit is 63:30 maar hij begint dan weer opnieuw en geeft 3:30 weer.

Het lijkt me niet dat dit aan de minuten ligt maar eerder aan de uren. Net of er een maximum aan zit...
 
Bas Cost Budde

Bas Cost Budde

10/04/2012 12:52:23
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$hours
= date("i", $timetotal);
?>


http://nl.php.net/manual/en/function.date.php ::

i Minutes with leading zeros 00 to 59

Ik volg niet wat je hiermee berekent.
---

Misschien helpt het als je nog eens compact noteert wat je gegevens zijn, wat voor soort uitvoer je wil produceren, en daar dan een overzichtelijke route naartoe programmeert? Je maakt uitgebreid gebruik van date(), waarom eigenlijk?
 
Erwin H

Erwin H

10/04/2012 13:11:43
Quote Anchor link
Trinco ingels op 10/04/2012 12:42:07:
Het lijkt me niet dat dit aan de minuten ligt maar eerder aan de uren. Net of er een maximum aan zit...

Natuurlijk zit er een limiet aan. Heb je wel eens op de klok gekeken en daar 3:63:30 op zien staan (h:m:s)?
Quote:
Erwin het zit hem erin dat de minuten wel opgeteld worden.
dus zoals ik aangaf heb ik 53:45 en daar komt dan 9:45 bij dan zou je zeggen dit is 63:30 maar hij begint dan weer opnieuw en geeft 3:30 weer.

Nee, wat hij geeft is 1:03:30, alleen omdat je de uren niet print zie je alleen de minuten en secondes.
Daarom, als je het totaal aantal minuten wilt weten, dan doe je er goed aan om met simpele integers te gaan werken en niet met datetime functies. Die zijn namelijk gelimiteerd tot de waardes die op de klok daadwerkelijk voor kunnen komen en 63 minuten zal je dus nooit als uitkomst krijgen.
Gewijzigd op 10/04/2012 13:12:17 door Erwin H
 
Trinco ingels

trinco ingels

10/04/2012 13:13:12
Quote Anchor link
Oke inderdaad ik zie dat die i voor minuten staat.

Wat ik wil is het volgende:

Ik voer allemaal gewerkte uren in, per dag heb je dan een een totaal aantal uur gewerkt bijvoorbeeld: 4:30 (4uur en 30 min).
Er komen dus meerdere regels in de database te staan.
Als ik ze opvraag moet het script de uren + minuten optellen. En dan het uiteindelijke totaal weergeven op het scherm.

Dat is wat ik verwacht.

Het script is niet helemaal zelf geschreven toen der tijd.. Ik heb me hierin wel wat verdiept maar nog niet goed genoeg.

Ik hoop dat ik je het wat makkelijker maak.
 
Erwin H

Erwin H

10/04/2012 13:18:51
Quote Anchor link
Staan de uren en minuten in aparte velden in de database? Zo ja dan is het redelijk eenvoudig op te lossen.
Gewijzigd op 10/04/2012 13:19:58 door Erwin H
 
Trinco ingels

trinco ingels

10/04/2012 13:20:26
Quote Anchor link
Erwin H op 10/04/2012 13:18:51:
Staan de uren en minuten in aparte velden in de database? Zo ja dan is het redelijk eenvoudig op te lossen.


JaEDIT: moet zijn nee, ze staan zo bijvoorbeeld in de database: 09:45:00 , 07:45:00 , 08:30:00
Gewijzigd op 10/04/2012 13:24:54 door trinco ingels
 
Erwin H

Erwin H

10/04/2012 13:25:56
Quote Anchor link
Nee dus :-)
Wat ik bedoelde is of je een aparte kolom hebt voor uren en een aparte voor minuten (had ik misschien beter moeten verwoorden).

Dan is denk ik het makkelijkste om het met php op te lossen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$h
= 0;
$m = 0;

//loop door alle resultaten heen en tel de uren bij elkaar op en de minuten
foreach( $row as $r ){
  $times = explode( ':', $r['uren'] );
  $h += $times[0];
  $m += $times[1];
}


//nu nog het aantal minuten terugbrengen naar max 60 en het aantal uren ophogen
$h += floor($m / 60);
$m %= 60;

echo 'gewerkte uren: '.$h.':'.$m;
?>
Gewijzigd op 10/04/2012 14:25:46 door Erwin H
 
Trinco ingels

trinco ingels

10/04/2012 13:41:58
Quote Anchor link
Erwin op welke manier zou ik dit dan het beste aanpakken?

Zou ik niet de sum functie binnen mysql gebruiken ?
Gewijzigd op 10/04/2012 13:56:08 door trinco ingels
 
Erwin H

Erwin H

10/04/2012 14:25:32
Quote Anchor link
Je kan het altijd proberen, maar gezien de manier waarop het is opgeslagen geef ik je weinig kans van slagen.
 
Trinco ingels

trinco ingels

10/04/2012 14:36:50
Quote Anchor link
Erwin H op 10/04/2012 14:25:32:
Je kan het altijd proberen, maar gezien de manier waarop het is opgeslagen geef ik je weinig kans van slagen.


Dus je zegt dat ik uur en minuten in een aparte kolom moet opslaan?
En dan met behulp van je script het totaal moet uitrekenen?

Opzich zou je toch ook deze tijden met elkaar moeten kunnen optellen...
 
Bas Cost Budde

Bas Cost Budde

10/04/2012 15:05:44
Quote Anchor link
het type 'tijd' is niet geschikt voor deze toepassing. Acht en een half uur is niet hetzelfde als 8:30:00.

Je kunt de uren misschien gewoon opslaan als decimal. Uren en minuten in twee velden kan ook, maar levert je wel wat werk steeds als je iets met een record wil doen. Daar staat dan tegenover dat 10 minuten niet als nette fractie in een decimal-veld gaat...
 
Trinco ingels

trinco ingels

10/04/2012 15:19:06
Quote Anchor link
Nu heb ik het volgende wel werkend gekregen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$result = mysql_query("SELECT SEC_TO_TIME( SUM( TIME_TO_SEC(DATE_FORMAT(totaal, '%H:%i:%s' ) ) ) ) AS total_time FROM uren WHERE ingevuld_door = '".$_SESSION['sid']."'");
$row = mysql_fetch_array( $result );
echo $row['total_time'];


Het resultaat is 63:30:00. Hoe krijg ik nu die laatste 2 nullen eraf van seconde?
 
Bas Cost Budde

Bas Cost Budde

10/04/2012 15:29:07
Quote Anchor link
dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_time-format

doe er nog een TIME_FORMAT() omheen in je query
 
Trinco ingels

trinco ingels

10/04/2012 15:38:09
Quote Anchor link
Bas Cost Budde op 10/04/2012 15:29:07:
dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_time-format

doe er nog een TIME_FORMAT() omheen in je query


Jammer dat hij niet werkt..
nu met time format
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$result = mysql_query("SELECT SEC_TO_TIME( SUM( TIME_TO_SEC(TIME_FORMAT(totaal,'%H:%i' ) ) ) ) AS total_time FROM uren WHERE ingevuld_door = '".$_SESSION['sid']."'");


komt misschien door TIME_TO_SEC omdat die ook een format heeft van 00:00:00?
 
Bas Cost Budde

Bas Cost Budde

10/04/2012 15:39:19
Quote Anchor link
met "omheen" bedoel ik aan de buitenkant. TIME_FORMAT(SEC_TO_TIME( enz
 
Trinco ingels

trinco ingels

10/04/2012 15:50:01
Quote Anchor link
Er "omheen" geeft een warning en print niets op het scherm

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
                                        $result = mysql_query("SELECT TIME_FORMAT(SEC_TO_TIME( SUM( TIME_TO_SEC(totaal,'%H:%i' ) ) ) ) AS total_time FROM uren WHERE ingevuld_door = '".$_SESSION['sid']."'");


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
                                        $result = mysql_query("SELECT TIME_FORMAT(SEC_TO_TIME( SUM( TIME_TO_SEC(totaal ) ) ),'%H:%i' ) AS total_time FROM uren WHERE ingevuld_door = '".$_SESSION['sid']."'");


Toevoeging op 10/04/2012 16:15:20:

Het is me uiteindelijk toch gelukt!

Hij moest nog binnen het laatste haakje...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$result = mysql_query("SELECT TIME_FORMAT(SEC_TO_TIME( SUM( TIME_TO_SEC(totaal ) ) ), '%H:%i' ) AS total_time FROM uren WHERE ingevuld_door = '".$_SESSION['sid']."'");


Bedankt allen! Ik ga me keer focussen op het rekenen met tijden in php:p
 
Erwin H

Erwin H

10/04/2012 16:33:37
Quote Anchor link
Trinco ingels op 10/04/2012 14:36:50:
Erwin H op 10/04/2012 14:25:32:
Je kan het altijd proberen, maar gezien de manier waarop het is opgeslagen geef ik je weinig kans van slagen.


Dus je zegt dat ik uur en minuten in een aparte kolom moet opslaan?
En dan met behulp van je script het totaal moet uitrekenen?

Opzich zou je toch ook deze tijden met elkaar moeten kunnen optellen...

Dat zeg ik eigenlijk wel ja (behalve dan dat als je het in twee kolommen hebt je een eenvoudige SUM() kunt doen in MySQL). Wat je nu allemaal doet is een oplossing bedenken voor een probleem dat je niet zou moeten hebben. Want wat nu als iemand in een keer 63 uur en 30 minuten in wil vullen. Ga je nu behoorlijk nat op.
Gewijzigd op 10/04/2012 16:34:23 door Erwin H
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.