{PHP] strtotime

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

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Weet iemand waarom deze opdracht niet altijd een rond getal in dagen oplevert?

$days = (strtotime("2006-10-30") - strtotime("2006-10-29")) / (60*60*24);

Maar in bovenstaand voorbeeld 1.0416666666667?

Ik zou denken dat ik iets heel simpels over het hoofd zie, maar dit is de eerste keer dat ik met
timestamps en strtotime werk...

Acties:
  • 0 Henk 'm!

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 00:22

DizzyWeb

Ondertiteld

Waarom zouden er ronde getallen uit komen? Je hebt een verschil tussen 2 momenten in seconden. Pas als het een veelvoud van het aantal seconden in een dag is, komt er een rond getal uit. Dat heeft niets met PHP temaken, maar enkel met wiskunde.

Hier stond iets niet zo slims. Nevermind.

[ Voor 10% gewijzigd door DizzyWeb op 20-10-2006 20:45 ]


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Wanneer gaat de wintertijd in? ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Om een of andere reden is strtotime("2006-10-30") - strtotime("2006-10-29") niet 86400 maar 90000. Dat is dus precies een uurtje extra. Goh, zou dat te maken met daylight saving times? :P

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
DizzyWeb schreef op vrijdag 20 oktober 2006 @ 20:39:
Waarom zouden er ronde getallen uit komen? Je hebt een verschil tussen 2 momenten in seconden.
Volgens mij kijk ik alleen naar de datums, en niet naar de tijden.
In bijna alle gevallen komt er een rond getal uit.

Bijvoorbeeld: $days = (strtotime("2006-10-20") - strtotime("2006-10-19")) / (60*60*24);

Het berekende verschil tussen 19 en 20 oktober is hier netjes 1 dag.
Alleen in een bepaald geval gaat het fout...

Acties:
  • 0 Henk 'm!

  • djexplo
  • Registratie: Oktober 2000
  • Laatst online: 07-07 15:40
Verwijderd schreef op vrijdag 20 oktober 2006 @ 20:45:
Om een of andere reden is strtotime("2006-10-30") - strtotime("2006-10-29") niet 86400 maar 90000. Dat is dus precies een uurtje extra. Goh, zou dat te maken met daylight saving times? :P
T'ja, die wintertijd moet ze echt een keer afschaffen, maakt de computer code alleen maar ingewikkelder ;)

'if it looks like a duck, walks like a duck and quacks like a duck it's probably a duck'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op vrijdag 20 oktober 2006 @ 20:45:
Om een of andere reden is strtotime("2006-10-30") - strtotime("2006-10-29") niet 86400 maar 90000. Dat is dus precies een uurtje extra. Goh, zou dat te maken met daylight saving times? :P
DANK U!!!!! :) haha
Ik wist dat ik iets stoms over het hoofd zag.

Ik ga ff in de hoek staan nu. 8)

Acties:
  • 0 Henk 'm!

Verwijderd

Ik ben het er helemaal mee eens hoor. Maar in dit geval kun je wel volstaan met het casten van het resultaat naar een integer.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op vrijdag 20 oktober 2006 @ 20:52:
Ik ben het er helemaal mee eens hoor. Maar in dit geval kun je wel volstaan met het casten van het resultaat naar een integer.
Komt dat op hetzelfde neer als afronden?

EDIT: (lampje) Een cast discard waarschijnlijk gewoon alles achter de . ?

[ Voor 12% gewijzigd door Verwijderd op 20-10-2006 20:54 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op vrijdag 20 oktober 2006 @ 20:53:

Komt dat op hetzelfde neer als afronden?

EDIT: (lampje) Een cast discard waarschijnlijk gewoon alles achter de . ?
Het (int) voor de expressie zetten doet hetzelfde als round() om de expressie zetten. Het is dus inderdaad hetzelfde.
Let erop dat je round() gebruikt, en niet ceil() of floor(). Het verschil kan ook minder dan 1 zijn ;)

[ Voor 1% gewijzigd door Verwijderd op 21-10-2006 11:29 . Reden: Ik lul weer eens uit mijn nek ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op vrijdag 20 oktober 2006 @ 20:56:
[...]

Het (int) voor de expressie zetten doet hetzelfde als round() om de expressie zetten. Het is dus inderdaad hetzelfde. Let erop dat je round() gebruikt, en niet ceil() of floor(). Het verschil kan ook minder dan 1 zijn ;)
Acknowledged!
Dank.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

Verwijderd schreef op vrijdag 20 oktober 2006 @ 20:56:
[...]

Het (int) voor de expressie zetten doet hetzelfde als round() om de expressie zetten. Het is dus inderdaad hetzelfde.
nope:
PHP:
1
2
3
$a = 1.6;
echo (int)$a; // 1
echo round($a); // 2

;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

(int) ervoor zetten == zelfde als floor;)

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Snakiej schreef op vrijdag 20 oktober 2006 @ 22:57:
(int) ervoor zetten == zelfde als floor;)
Oke dus toch, bij de cast wordt gewoon alles achter de punt genegeerd.

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Verwijderd schreef op vrijdag 20 oktober 2006 @ 23:01:
[...]


Oke dus toch, bij de cast wordt gewoon alles achter de punt genegeerd.
Genegeerd is het woord niet, het past gewoon niet in de geheugenruimte ( je kan geen kommagetal steken in een int ), dus kapt hij het af

[ Voor 3% gewijzigd door Snake op 20-10-2006 23:04 ]

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Snakiej schreef op vrijdag 20 oktober 2006 @ 23:03:
[...]

Genegeerd is het woord niet, het past gewoon niet in de geheugenruimte ( je kan geen kommagetal steken in een int ), dus kapt hij het af
Zo had ik het ook bedoeld, foute woordkeuze van mijn kant.
Bedankt voor de extra uitleg! Altijd nuttig voor wie meeleest...

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

schijnt trouwens dat floor($float) en round($float) sneller zijn dan (int)$float. Waarom weet ik niet, maar handig om te overwegen :)

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
MBV schreef op zaterdag 21 oktober 2006 @ 00:30:
schijnt trouwens dat floor($float) en round($float) sneller zijn dan (int)$float. Waarom weet ik niet, maar handig om te overwegen :)
Voor je zulke uitspraken doet is het meestal verstandig ze te accomoderen met een benchmark. Daarbij zijn dit soort optimalisaties niet echt van een wezelijke orde van grootte.

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

tja, collega zei dat hij een benchmark gezien had, dus heb geen link. Daarnaast vind ik bij floor($float) duidelijker wat de betekenis is :)

Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Voor de volledigheid: (int) is niet altijd hetzelfde als floor(). Het kan hier wel omdat het positieve getallen zijn, maar bij negatieve getallen doet (int) hetzelfde als ceil()... :)

(int)x = floor(x); x>=0
(int)x = ceil(x); x<0

Acties:
  • 0 Henk 'm!

  • MBV
  • Registratie: Februari 2002
  • Laatst online: 20-09 22:44

MBV

ok, point taken. 'Gelukkig' werk ik niet vaak met negatieve getallen :)
Pagina: 1