Hallo,

Ik ben op zoek naar een mogelijkheid in PHP om de datum van elke donderdag 21:00 weer te geven. Nu heb ik gekeken bij PHP date, alleen hier kan ik niets nuttigs vinden hiervoor. Het moet zo worden:

Totaal:
020120142100
PHP date:
echo date('d m y 2100');


Alleen het werkt niet en hoe moet ik de datum van alleen donderdag om 21:00u ophalen? Via een if or else code?

kan iemand mij hier mee helpen? Alvast bedankt!
Het verschil zit hem in het bereik van de integer waardes in php (welke afhankelijk is van het OS). 020120142100 is namelijk een octaal getal (het begint met een 0) en zal als je het omzet naar een decimale integer net voorbij het bereik van een 4 byte integer gaan.

Testje:

<?php
$var = 020120142100;
echo (int)$var.'<br>';
echo date( 'd-m-Y hh:mm:i', $var ).'<br>';
echo PHP_INT_SIZE.' '.PHP_INT_MAX;
?>


Op mijn lokale windows machine:

-2126461888
14-08-1902 0404:0808:08
4 2147483647


Op mijn linux server:

2168505408
19-09-2038 1010:0909:36
8 9223372036854775807

<?php
$datum = new datetime(); // evt timezone vermelden

while($datum->format('Y') == 2014)
{
   $datum->modify('next thursday');
   echo $datum->format('Y-m-d 21:00');
}
?>


Dat script werkt pas vanaf morgen :)
<= 2014 dan maar...

:-)
Ivo P op 31/12/2013 13:24:03


<?php
$datum = new datetime(); // evt timezone vermelden

while($datum->format('Y') == 2014)
{
   $datum->modify('next thursday');
   echo $datum->format('Y-m-d 21:00');
}
?>





Nu wil ik de vorige donderdag hebben, en heb dus next veranderd in previous. Alleen nu krijg ik duizenden datums, en ik wil alleen maar de eerste want dat is de goede. Hier de eerste 4 die ik krijg, van de duizenden.
2013-12-26 21:002013-12-19 21:002013-12-12 21:002013-12-05 21:00

Het dikgedrukte stukje moet ik hebben, hoe kun je dit het beste oplossen?
hoeveel moet je er hebben?

ik ging in mijn script uit van "alle in 2014"
Dat wordt in regel 4 bepaald: jaar == 2014

Als je vanaf nu achteruit wilt, dan moet je ook op de een of adere manier opgeven wat je eindpunt gaat zijn.
Of als het er maar 1 is: dan heb je natuurlijk geen while-lus nodig en vervallen de regels 4,5 en 8
Ernesto Bleijenberg op 31/12/2013 14:23:30

Nu wil ik de vorige donderdag hebben, en heb dus next veranderd in previous.


Okay, wat je PHP vraagt, is vorige donderdag, dan de donderdag daarvoor, dan die daarvoor, dan die daarvoor ... en dan stopt pas wanneer we later zijn dan 2014.

Dan kan je inderdaad oneindig blijven zoeken.

Zo werkt een lus nu eenmaal.


Wil je enkel 1 waarde, bv. vorige donderdag, dan mag die ->modify() niet binnen de while staan.

Dan wordt het daynr - 4, net andersom dus en idd. sub()
<?php

$startdate = new DateTime('now');

$daynr = $startdate->format('w');

$daysdiff = $daynr - 4; // donderdag is dag 4 nu $daynr - 4; ipv 4 - $daynr;

if($daysdiff < 0)
$daysdiff += 7;

$prevThursday = $startdate->sub(new DateInterval('P'.$daysdiff.'D')); // nu sub() in plaats van add()


echo $prevThursday->format('d-m-Y') . ' ' . $prevThursday->format('dmY2100') . '<br>';

?>
Ivo P op 31/12/2013 14:36:32

hoeveel moet je er hebben?

ik ging in mijn script uit van "alle in 2014"
Dat wordt in regel 4 bepaald: jaar == 2014

Als je vanaf nu achteruit wilt, dan moet je ook op de een of adere manier opgeven wat je eindpunt gaat zijn.
Of als het er maar 1 is: dan heb je natuurlijk geen while-lus nodig en vervallen de regels 4,5 en 8


Het werkt nu, ik heb de while lus verwijderd en krijg nu de datum van afgelopen donderdag. Enorm bedankt!

Reageren