[PHP] Tijd optellen (minuut+seconden)

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

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ocdaan
  • Registratie: Augustus 2001
  • Laatst online: 13-06 11:01

ocdaan

Niet zo zeuren jongens!

Topicstarter
Hi all,

Iemand enig idee hoe tijd op te tellen?

"03:00:00" // 3 uur

"00:01:30" // 1 minuut 30

opgeteld verwacht ik >> "03:01:30"

met minuten lukt me dit wel, zie functie:

code:
1
2
3
4
5
6
function add_time($org, $minutes) { 
    $by = $minutes.' mins';
    $start_time = strtotime($org); 
    $add_time   = strtotime('+'.$by, $start_time); 
    return date('H:i', $add_time);
}


maar met seconden erbij.....???

kan zijn dat ik het niet meer zie na een hele dag proggen maar kom er echt niet meer uit, als iemand een andere oplossing heb.... ook goed.

alvast bedankt :)

Acties:
  • 0 Henk 'm!

  • Mad Marty
  • Registratie: Juni 2003
  • Laatst online: 00:14

Mad Marty

Je bent slimmer als je denkt!

Bijvoorbeeld omrekenen naar UNIX timestamps? Of
PHP:
1
return date('H:i:s', $add_time);

?

Zie http://nl2.php.net/manual/nl/ref.datetime.php voor de mogelijkheden.

[ Voor 21% gewijzigd door Mad Marty op 04-11-2007 19:06 ]

Rail Away!


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 13:03
PHP:
1
2
3
4
function add_time($original_time, $minutes, $seconds = false) { 
  $end_time = strtotime($original_time) + $minutes * 60 + $seconds;
  return date('H:i', $end_time);
}


@hierboven: omrekenen naar unix timestamps doet'ie in principe al dankzij strtotime he, probleem is alleen dat hij de strings gebruikte om op te tellen in plaats van de unixtime die strtotime oplevert ;)

Overigens gezien je returnwaarde zit je waarschijnlijk daarna weer met strings te werken. Dit gaat je een berg hoofdpijn bezorgen, beter is zoals m'n bovenbuurman al aangeeft overal enkel nog met unix_timestamps te werken.

Last but not least: wees zuinig met variabelenamen als 'org', 'dbcl', 'arg' etc. Nu weet je nog prima waar alle afkortingen voor staan, als je de code over een jaar weer terugleest waarschijnlijk niet - laat staan iemand anders die je code doorneemt ;)

//Edit: code wat opgeschoont en verduidelijkt.

[ Voor 47% gewijzigd door FragFrog op 04-11-2007 19:17 ]

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • siepeltjuh
  • Registratie: Maart 2003
  • Niet online
strtotime vind ik nou ook niet een hele mooie oplossing, eerder een smerig en erg foutgevoelige variant.

Uit je TS is niet duidleijk op te maken of het nu gaat om datum`s en tijden of om stopwatch tijden.

Beter is om met mktime en date te werken. Voor als je met datum`s wat doet.

Of afhankelijk van de bron van je data (als het stopwatch tijden zijn) gewoon te gaan rekenen met ints en floats. Net voor je output kan je dan iets doen als:

PHP:
1
2
3
4
5
6
function int_to_str ($tijd_in_int)
{
$tijd_in_str = floor($tijd_in_int/60).' Minuten en '.($tijd_in_int%60).' seconden';
}
$tijd = 402;
echo int_to_str($tijd);



Dit is makkelijk uit te bouwen naar whatever voor uren dagen je wilt berijken. Tevens is het grote voordeel dat je makkelijker rekent met deze tijden. Je hoeft voor het rekenen geen aparte optel en aftrek functies te maken, maar kan het gewoon als een int behandelen totdat je het output.

[ Voor 12% gewijzigd door siepeltjuh op 04-11-2007 19:21 ]

Can`t live without the mods


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 13:03
siepeltjuh schreef op zondag 04 november 2007 @ 19:20:
Of afhankelijk van de bron van je data (als het stopwatch tijden zijn) gewoon te gaan rekenen met ints en floats.
Ik had gehoopt dat je na dit topic toch wel van mening was veranderd omtrent het gebruik van floats voor datum/tijd representatie. Iemand die een simpel tijd scriptje niet aan de praat krijgt zou ik het gebruik daarvan al helemaal hard afraden.

Daarnaast is een unix timestamp al een int, met dit verschil dat je daarmee wel foutloos data kan optellen. Zelf naar seconden gaan omrekenen en optellen is eigenlijk altijd fout, hetzij omdat je veel extra werk doet wat date voor je kan doen, hetzij omdat je geen rekening houdt met bijvoorbeeld schrikkeljaren, zomertijd, etc.

[ Voor 23% gewijzigd door FragFrog op 04-11-2007 19:35 ]

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • ocdaan
  • Registratie: Augustus 2001
  • Laatst online: 13-06 11:01

ocdaan

Niet zo zeuren jongens!

Topicstarter
Ahh geweldig jongens, zal jullie posts ff bestuderen.....

De "00:00:00" notatie gebruk ik eingelijk omdat het zo uit mysql komt....

En ik moet een playlist samenstellen van clips, dus de duration van een clip staat in de db als "00:00:00".

Denk dat m'n beweegredenen zo wel duidelijk zijn en by the way, ben niet een erg gevorderde php-er ;)

thanx

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 13:03
Ook uit een database hoort dat geen probleem te zijn. MySQL kan dit op twee manieren voor je oplossen: selecteren als UNIX_TIMESTAMP of met DATE_FORMAT je tijd / datum al direct goed geformat uit je database halen. Zie ook de manual.

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • ocdaan
  • Registratie: Augustus 2001
  • Laatst online: 13-06 11:01

ocdaan

Niet zo zeuren jongens!

Topicstarter
Ahhh helemaal super guys :)

Heb het truckje inmiddels wel door ... ben ff aan het oefenen geweest

De gehele berekening begint nu met een timestamp en daar tel ik dan steeds de duration (int) bij op.

Ik dank jullie hartelijk ;) was ff het zetje in de rug zeg maar....

laters!
Pagina: 1