[php]Uren optellen

Pagina: 1
Acties:
  • 336 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Jochemmol
  • Registratie: Augustus 2004
  • Laatst online: 07-05-2014
Ik ben bezig met een site waar de gewerkte uren/minuten worden opgeslagen. Deze tijden moet bij elkaar worden opgeteld. De tijden worden uitgelezen uit een MySQL database en dan met de functie mktime(); opgeteld. Ik doe dit
code:
1
mktime(21 + 4, 59 + 2, 0);


Die waarden staan in een variabele die uit de Database is uitgelezen maar voor het testen vul ik zelf de uren/minute/seconden in. Om een leesbare waarde op het scherm te krijgen doe ik dit
code:
1
2
 $date = date("H:i:s", $tijd1) ; 
 echo $date;

In dit geval komt er netjes 02:01:00 op het scherm te staan. Maar ik mis dus 24 uur. Als ik dit doe.
code:
1
2
$datum = mktime(21 + 4 , 59 + 2 , 0, 06, 21, 2005);
$date = date("d-m-Y H:i:s", $datum );

Dan wordt netjes doorgeteld naar de volgende dag (22-06-2005 02:01:00).

Ik denk dat deze manier niet geschikt is voor het optellen van uren. 8)7

Uren optellen is niet zo'n probleem. dat mag gewoon doorlopen voorbij de 24 uur. Ik wil niet in dagen omzetten. Alleen hoe is het mogelijk om de minuten netjes op te laten tellen. Met deze functie werkt het precies dat als ik 59 minuten heb en ik doe er 2 minuten bij dan is dat 61 maar omdat er in tijden gerekend wordt weet hij dat er dus een uur bijgeteld moet worden. Hoe krijg ik dat voorelkaar. Ik kan op google/php.net/tweakers.net geen functie (zoals mktime) vinden waarmee ik netjes de minuten bij elkaar kan optellen. :?

Jochemmol


Acties:
  • 0 Henk 'm!

  • _reboot_
  • Registratie: December 2004
  • Laatst online: 07-09 22:19
Aantal uren/minuten gedeeld door 6 en vervolgens * 4 :)

Daar kun je wel mee rekenen...

[ Voor 8% gewijzigd door _reboot_ op 21-06-2005 10:07 . Reden: toevoeging ]


Acties:
  • 0 Henk 'm!

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 05-09 14:30

DizzyWeb

Ondertiteld

Wat wil je nu precies voor elkaar krijgen?

Je wil het verschil tussen twee tijden (incl data) hebben?

Acties:
  • 0 Henk 'm!

Verwijderd

Kan je niet gewoon in minuten rekenen en die bij display door 60 delen om uren te krijgen?

pseudocode
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
uren1=21
uren2=4

min1=59
min2=2

tijd1=uren1*60 + min1
tijd2=uren2*60 + min 2

totaal=tijd1 + tijd2

totaaluren=int(totaal / 60)
totaalminuten=totaal - (totaaluren * 60)

Acties:
  • 0 Henk 'm!

  • Lukse
  • Registratie: Januari 2004
  • Laatst online: 12-04-2023
Zoiets mss?

PHP:
1
2
3
4
5
6
function AddTimes($hours, $minutes, $seconds) {
  $s = $seconds % 60;
  $m = $minutes % 60 + ($seconds - $s)/60;
  $h = $hours + ($minutes - $m)/60;
  return mktime($h, $m, $s);
}

Snel uit m'n hoofd geschreven.

Acties:
  • 0 Henk 'm!

  • Jochemmol
  • Registratie: Augustus 2004
  • Laatst online: 07-05-2014
Sorry DizzyWeb je heb gelijk. Ik ben erg onduidelijk,

De bedoeling is dat ik 2 tijden heb bijvoorbeeld.

1) 21 uur en 59 minuten en 0 seconde.
2) 4 uur 2 minuten en 0 seconde.

Als ik dit optel moet het worden 26 uur en 1 minuut

Ik krijg dit in php niet voorelkaar. Ik heb het geprobeert met mktime(). maar ik denk dat dat niet geschikt is eigenlijk het lukte ook niet.

Jochemmol


Acties:
  • 0 Henk 'm!

  • Jochemmol
  • Registratie: Augustus 2004
  • Laatst online: 07-05-2014
Lukse dit werkt niet omdat er met de functie mktime() dagen gemaakt worden. Dus als ik dit doe.
code:
1
2
3
4
5
6
7
8
9
function AddTimes($hours, $minutes, $seconds) { 
  $s = $seconds % 60; 
  $m = $minutes % 60 + ($seconds - $s)/60; 
  $h = $hours + ($minutes - $m)/60; 
  return mktime($h, $m, $s); 
} 

$time = date("H:i:s", AddTimes(25, 61, 0)) ;  
echo $time;


dan krijg ik weer gewoon 02:01:00 terug ik plaats van 26:01:00 :|

Ik doe dit hieronder omdat de functie mktime() een rare waarde (1119398460) terug geeft. doormiddel van de functie date() kan ik er een normale tijd van maken.
code:
1
2
$time = date("H:i:s", AddTimes(25, 61, 0)) ;  
echo $time;

[ Voor 23% gewijzigd door Jochemmol op 21-06-2005 10:23 ]

Jochemmol


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 23:10

Janoz

Moderator Devschuur®

!litemod

Je moet sowieso geen mktime gebruiken. Jou data is een tijdsduur. Een datum/tijd is een tijdstip. Werk gewoon met minuten en laat dit eventueel tijdens het invoeren en afdrukken omrekenen naar een uur minuut combo.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45

Bosmonster

*zucht*

Je wilt gewoon uren optellen, dus een TIJD-format functie als date() is hierbij compleet nutteloos.

Neem de eerdere suggestie aan en reken in minuten, deel dit vervolgens weer door 60 voor het aantal uur.

edit:

blah te laat :P

[ Voor 8% gewijzigd door Bosmonster op 21-06-2005 10:23 ]


Acties:
  • 0 Henk 'm!

  • Jochemmol
  • Registratie: Augustus 2004
  • Laatst online: 07-05-2014
Dus wat ik hetbeste kan doen is eigenlijk de waarde die de gebruiker invoerd de uren * 60 doen en die waarde bij de minuten optellen. (secondes kunnen niet worden ingevoerd). Het totaal aantal minuten in de MySQL database schrijven. Dan alle "minuten" velden uitlezen. Bij elkaar optellen en dan delen door 60.

Dan heb ik het aantal uren en minuten.

Jochemmol

Pagina: 1