[PHP] Tijden van elkaar aftrekken

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

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MP83
  • Registratie: Januari 2000
  • Laatst online: 02-02 11:53
Lang gezocht, niet gevonden, dan maar hier proberen :Y)

Voor een tooltje om mijn werkuren te registreren wil ik twee tijden van elkaar aftrekken. De tijden staan in het time-format, bijvoorbeeld 17:00:00 voor vijf uur s'middags.

Als ik nu de begintijd van de eindtijd aftrek krijg ik het verschil netjes afgerond in hele uren terug. Wat ik wil is niet de hele uren, maar het exacte verschil op de minuut precies. Zo kan ik netjes totalen uitrekenen per week en per dag.

Ik heb ook gezocht op php.net en even gekeken naar strtotime(), in de hoop daar een timestamp uit te krijgen, maar daar rolt enkel een groot getal uit, wat helaas geen timestamp is.

Weet iemand hoe ik wél netjes de tijden van elkaar kan aftrekken en totalen uitrekenen?

Acties:
  • 0 Henk 'm!

  • WhizzCat
  • Registratie: November 2001
  • Laatst online: 15-05-2024

WhizzCat

www.lichtsignaal.nl

dat wordt denk ik zelf iets maken in de trant van je time naar en string zetten, met regexp oid filteren en dan de boel uitrekenen. Iets anders kan ik zo 1-2-3 niet verzinnen

Gezocht: netwerkbeheerder
Als je het niet aan een 6-jarige kan uitleggen, snap je er zelf ook niks van! - A. Einstein


Acties:
  • 0 Henk 'm!

  • CrashOne
  • Registratie: Juli 2000
  • Niet online

CrashOne

oOoOoOoOoOoOoOoOoOo

Bestaat er niet iets als dateAdd() zoals in vbscript onder asp?

http://www.google.com/sea...start=0&ie=utf-8&oe=utf-8

Huur mij in als freelance SEO consultant!


Acties:
  • 0 Henk 'm!

Verwijderd

[rml][ BC3] Tijden aftrekken? [ php][/rml]
deze werkte volgens de TS

Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Als je ze uit je database haalt (MySQL?) dan zou je het daar al in kunnen berekenen: Meetstal kan je, wanneer je gebruik maakt van het TIME type, de tijden gewoon van elkaar aftrekken.
Andere mogelijkheid is, om de tijden om te zetten naar unix-timestamps, en ze dan van elkaar af te halen.

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

Verwijderd

Terug rekenen naar secondes, uitgaande van het formaat minuten:secondes

PHP:
1
2
3
4
5
6
7
8
function getSecondes($tijd){
  list($uren,$secondes) = explode(":",$tijd);
  return ($uren*60)+$secondes;
}

$tijd1 = "17:00";
$tijd2 = "17:30";
echo "Verschil in secondes: ".(getSecondes($tijd2)-getSecondes($tijd1));


(DOM (secondes = minuten natuurlijk) kom net uit bed sorry)

[ Voor 17% gewijzigd door Verwijderd op 26-08-2003 11:48 . Reden: DOM! ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

strtotime -- Parse about any English textual datetime description into a UNIX timestamp
Daar komt echt wel een (unix) timestamp uit hoor :)

Acties:
  • 0 Henk 'm!

  • Sjeik
  • Registratie: Augustus 2001
  • Laatst online: 29-05 14:39
Mr.Blonde schreef op 26 August 2003 @ 11:36:Ik heb ook gezocht op php.net en even gekeken naar strtotime(), in de hoop daar een timestamp uit te krijgen, maar daar rolt enkel een groot getal uit, wat helaas geen timestamp is.
Weet je zeker dat dat grote getal geen unix timestamp is? Want die kan je dan heel makkelijk van elkaar aftrekken en dan weer omzetten in gewone tijden.

Was ik maar rijk en niet zo knap...


Acties:
  • 0 Henk 'm!

Verwijderd

strtotime -- Parse about any English textual datetime description into a UNIX timestamp
zucht :)

je moet alleen zorgen dat je dus je datetime goed in die functie gooit :p
en af en toe beetje zoeken www.php.net kan ook geen kwaad denk ik ;)

Acties:
  • 0 Henk 'm!

  • MP83
  • Registratie: Januari 2000
  • Laatst online: 02-02 11:53
WhizzCat schreef op 26 August 2003 @ 11:37:
dat wordt denk ik zelf iets maken in de trant van je time naar en string zetten, met regexp oid filteren en dan de boel uitrekenen. Iets anders kan ik zo 1-2-3 niet verzinnen
Zat ik ook aan te denken, maar als er een functie voor is of een makkelijkere oplossing, dan graag natuurlijk ;)
CrashOne schreef op 26 August 2003 @ 11:37:
Bestaat er niet iets als dateAdd() zoals in vbscript onder asp?

http://www.google.com/search?q=dateAdd php&sourceid=mozilla-search&start=0&start=0&ie=utf-8&oe=utf-8
Misschien wel interessant, ga ik naar kijken :)
Ziet er hoopvol uit, deze ga ik eerst proberen! :9
thomaske schreef op 26 August 2003 @ 11:40:
Als je ze uit je database haalt (MySQL?) dan zou je het daar al in kunnen berekenen: Meetstal kan je, wanneer je gebruik maakt van het TIME type, de tijden gewoon van elkaar aftrekken.
Andere mogelijkheid is, om de tijden om te zetten naar unix-timestamps, en ze dan van elkaar af te halen.
Gewoon van elkaar aftrekken gaat inderdaad wel, maar dan wordt het afgerond op hele uren. Wat ik wil is precies op de minuut. ;) Omzetten naar iets en dan aftrekken ga ik nu proberen met behulp van het BC3 topic van Zoepnek!

Acties:
  • 0 Henk 'm!

  • MP83
  • Registratie: Januari 2000
  • Laatst online: 02-02 11:53
ACM schreef op 26 augustus 2003 @ 11:42:
[...]

Daar komt echt wel een (unix) timestamp uit hoor :)
/me checkt z'n scriptje nog even en schrikt :D

In het uitrekenen naar uren ben ik een nul vergeten, daardoor kreeg ik er hele gekke tijden uit wat mij deed denken dat het nooit een timestamp kon zijn :o

Bedankt voor jullie tijd in ieder geval :P :D

Acties:
  • 0 Henk 'm!

Verwijderd

Maak er een unix timestamp van, dat kan je makkelijker berekenen.

time()
mktime()
date()

PHP:
1
2
3
4
5
6
7
$begintijd = explode(":","8:45:00");
$endtijd = explode(":","17:05:00");

$beginstamp = mktime($begintijd[0],$begintijd[1],$begintijd[2]);
$endstamp = mktime($endtijd[0],$endtijd[1],$endtijd[2]);
$totaletijd = $endstamp - $beginstamp;
$werktijd = date("H:i:s",$totaletijd);

non tested, eerst schijfdefragmentatie afronden voordat ik apache weer installeer

Maar als je een tijd eerst naar timestamp omrekend dan kan je het veel makkelijker van elkaar aftrekken omdat het gewoon een hele waarde is(secondes na 1970).

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
Mr.Blonde schreef op 26 augustus 2003 @ 11:46:
[...]Gewoon van elkaar aftrekken gaat inderdaad wel, maar dan wordt het afgerond op hele uren. Wat ik wil is precies op de minuut. ;) Omzetten naar iets en dan aftrekken ga ik nu proberen met behulp van het BC3 topic van Zoepnek!
Weet je zeker dat dat ook gebeurt als je het in je query doet? Volgens mij werkt het dan wel. Je maakt je kolommen van het type date-time en voert de datum netjes in:bijvoorbeeld met de NOW() functie. Het formaat is yyyy-mm-dd hh:mm:ss

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Zodra je bijde timestamps van elkaar afgetrokken hebt spreek je over een tijdsduur ipv een tijdsstip. De '$totaletijd' kun je daarom beter ook niet meer in een date function gooien maar gewoon met % en / opsplitsen in seconden, minuten en uren (en dagen ;) ).

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

Pagina: 1