Hallo,


Ik heb een variabele waarin een tijd staat: $tijd = '09:45:00';

Nou wil ik daar 25 minuten bij optellen. Ik kwam hiervoor de functie DateTime::add tegen waarvan ik neem ik aan gebruik kan maken.

Ik kwam er echter al snel achter dat een simpel iets als dit niet werkt:
<? $tijd_plus_25min = add($tijd + 25 minutes); ?>

Na wat klooien heb ik nu het volgende:
<? $tijd = '09:45:00';
$date = new DateTime($tijd, new DateTimeZone('Europe/Amsterdam'));
$date->add(new DateInterval('PT25M'));
echo $date->format('Y-m-d H:i:s'); ?>

Tot zoverre alles goed. Het probleem is nu, dat hij er ook de datum van vandaag en de tijdzone bij heeft gezet. Ik weet bijvoorbeeld niet hoe dit gaat reageren als de zomertijd weer ingaat, of wanneer de computer waarop het draait ineens in een andere tijdzone staat.
Ik wil er eigenlijk geen enkele datum of tijdzone bij hebben staan. Maar als ik de tijdzone weghaal zegt hij het volgende: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier.

Is er een manier om puur en alleen een tijd te hebben? En dus niets als een datum of tijdzone?
Is het misschien zinvoller om het hele probleem in SQL/query's op te lossen? De gegevens staan al in een tabel en SQL is veel handiger dan data processen met php
Inderdaad Aad, dit lijkt mij echts iets voor een stored procedure
Ok. Ik heb een oplossing gevonden, maar ik ben bang dat jullie hem vies, vuil en smerig vinden. Wat ik simpelweg doe, is de string omzetten naar een DateTime (dat wordt dan automatisch de datum van creatie, i.e. "vandaag"). Vervolgens tel ik er een aantal minuten bij op, en vervolgens zet ik de DateTime weer om naar een string. Op die manier hoop ik dat het al zijn informatie verliest wat betreft, datum, locatie en tijdzone. Ik heb het als volgt gedaan:
<? $koop_tijdstip = '09:55:00';
$tijdspanne = 10;
$koop_tijdstip_als_tijdvariabele = new DateTime($koop_tijdstip, new DateTimeZone('Europe/Amsterdam'));
$verkoop_tijdstip_als_tijdvariabele = $koop_tijdstip_als_tijdvariabele->add(new DateInterval('PT'.$tijdspanne.'M'));
$verkoop_tijdstip = (string)$verkoop_tijdstip_als_tijdvariabele->format('H:i:s'); ?>
Ik weet dat je dit ook mbv sql kan doen. Het probleem daarmee is echter dat ik dit een heel aantal keer moet loopen (aantal miljoen keer), en gezien het met (My/Postrge)SQL altijd tijd kost om een verbinding te maken, dacht ik dat het zo sneller is.

Ik had dit pas namelijk met een array van ongeveer 100.000 records en de conversie koste me 50 seconden extra execution time

50 secondes is geen enkel probleem, een paar uur ook niet. Het zit allemaal niet in een website, dus geduld kan ik wel opbrengen. Ik had eerst een systeem waarin ik alles in PostgreSQL deed. Dat duurde echter een aantal dagen, vandaar dat ik het nu met arrays in het geheugen probeer te doen.

Ik begrijp dus dat dit waarschijnlijk tegen alle regels in is. Ik bereik echter precies wat ik wil. Hebben jullie een praktisch argument waarom ik het niet zo zou doen?
De aller belangrijkste regel is dat je de performance optimaliseert, dus als jij door de data in een array te zetten een groot aantal queries uitspaart is dat juist de goede manier.
Maar als het niet voor een website is waarom gebruik je dan PHP, dat is niet de ideale programmeertaal voor niet web gebaseerde applicaties.
Je hebt gelijk dat php misschien niet de beste taal is voor mijn project. Python zou denk ik bijvoorbeeld beter zijn. Het is meer dat ik aan het roeien ben met de riemen die ik heb. Php beheers ik (redelijk) terwijl python een hele nieuwe taal zou zijn.

Eerst wil ik eens wat resultaten tevoorschijn toveren. Als dat succes heeft en het heeft zin om er meer mee bezig te zijn, dan ga ik met plezier python leren.. :-)

De aller belangrijkste regel is dat je de performance optimaliseert, dus als jij door de data in een array te zetten een groot aantal queries uitspaart is dat juist de goede manier.

Daar ben ik inderdaad steeds meer van overtuigd. Het script wat ik nu heb geschreven doet in 15 secondes, waar ik met mijn query-scripts zo'n 25 minuten over deed. Ik ben dus vol met energie dat ik hier compleet op het juiste spoor zit! :-)

Heel erg bedankt voor alle antwoorden in ieder geval!

Reageren