Ola,

Ik wil een bepaalde actie ondernemen, maar alleen op een bepaald tijdtip, bijvoorbeeld in de eerste 3 minuten van ieder half uur. Dus tussen 10.00 en 10.03 en tussen 10.30 en 10.33. En dan weer tussen 11.00 en 11.03 en tussen 11.30 en 11.33 enz. en dat 24 uur per dag. Hoe kan ik dat het beste aanpakken? Iemand misschien tips wat de beste manier is om de tijd te berekenen?
>> Houd gewoon een 'last_mail_sent' bij in de DB

Zoals ik al zei... als mijn services niet kunnen worden geladen, kan ik verder niks. Ook geen database call maken. Daarom wil ik het op deze manier doen.
Maar waren zouden je services ineens niet worden ingeladen?
Waarom niet een simpel tekst bestand met daarin de unix timestamp van wanneer het de laatste keer fout ging opslaan?

Vervolgens kun je een cronjob maken die bepaald of de timestamp in dat bestand langer dan X tijd eenheden in het verleden ligt. Alleen dan verstuur je een email. Als je niet veel bezoekers hebt kan het zijn dat je iets meer emails krijgt, maar dan had je het maar sneller op moeten lossen.

Beantwoord die vraag, daarna hebt je recht om de volgende code te gebruiken:
<?php

if ((date('i') % 30) < 3)
{
//
}
>> Maar waren zouden je services ineens niet worden ingeladen?

Geen idee? Een configuratie-bestand wat corrupt is of niet kan worden geladen? De yaml parser die niet werkt? In de praktijk zal het vrijwel nooit voorkomen, maar als het gebeurt wil ik er wel op zijn voorbereid en ervan op de hoogte worden gebracht. Als ik geen mail stuur naar mezelf, dan heb ik niks in de gaten.

>> Waarom niet een simpel tekst bestand met daarin de unix timestamp van wanneer het de laatste keer fout ging opslaan?

Is een optie, maar ik denk dat voor dit specifieke geval in mijn situatie mijn optie net zo handig is, zo niet handiger.

>> if ((date('i') % 30) < 3)

Euh, oké... dat is waarschijnlijk wat ik zoek... maar wat doe je hier precies :-s
De minuten ophalen dat snap ik, maar daarna..?
uh.... gewoon

<?php
$time = date('i');
if (($time >= 30 && $time <= 33) || ($time >= 0 || $time <= 3)){
echo 'dinges';
}
?>
>> uh.... gewoon

Oké.. das inderdaad vrij gewoon :)

Ben nog wel benieuwd naar wat Dos daar doet in zijn code?
Kijken het aantal minuten gedeeld kan worden door 30 zonder restwaarde.
>> Kijken het aantal minuten gedeeld kan worden door 30 zonder restwaarde.

Euh...? :-s Kun je dat iets verder uitleggen?
- Aar - op 16/12/2013 11:13:03

Kijken het aantal minuten gedeeld kan worden door 30 zonder restwaarde.


Ja maar dan word bijvoorbeeld de 31ste minuut niet goedgekeurd. Terwijl de 30ste t/m 33ste minuut het moeten doen.
% is de modulo operator.
Om heel simpel uit te leggen wat het doet: het haalt zo vaak mogelijk de waarde rechts (30) van de waarde links af (date('i')).

Om 18:5 zal gelden (date('i') % 30) === 5.
Om 21:40 zal gelden (date('i') % 30) === 10

Als je pseudo code wilt:
<?php

function modulo($left, $right) {
while ($left > $right)
{
$left -= $right;
}

return $left;
}

Reageren