Hallo,

Ik ben gestuit op een vreemd datumprobleem.

In mijn script maak ik gebruik van de time() functie. Die genereert een getal in seconden, gerekend vanaf 1-1-1970 00:00. http://www.php.net/manual/en/function.time.php

Getal 1382306400 geeft met de functie date('j-m-Y', 1382306400) 21-10-2013 als datum.
Getal 1382911200 geeft met date('j-m-Y', 1382911200) 27-10-2013 als datum. Dit is een verschil van 6 dagen.
Echter, als je beide timestamps van elkaar aftrekt kom je uit op 604800. Deel je dit door 24 uur en 3600 seconden, dan kom je uit op 7 dagen!!

Wie weet hoe dit kan?
Uiteindelijk wil ik in mijn script voor de periode van 1-8-2013 tot 1-8-2014 een lijst hebben van alle maandagen. Dat leek gelukt totdat ik op bovengenoemd merkwaardig probleem stuitte.

Is er iemand bekend met dit probleem? Het lijkt mij een bug, maar dat kan ik mij als beginnende php-er niet voorstellen.

Gr.
Cees
als je dit doet:
<?php

echo date('j-m-Y H:i:s', 1382306400) . '<br>';
echo date('j-m-Y H:i:s', 1382911200) . '<br>';

?>

dan zie je dat er tijdverschil in zit.

Het getal 1382824800 staat voor 27-10-2013 00:00:00

Het verschil is dan 518400.

6 * 24 * 60 *60 = 518400
Het verschil zit hem in de zomer/wintertijd, nu leven we op UTC(GMT)+1:00
In de zomer is dat UTC(GMT)+2:00.
En dan kan een uur zomaar ineens een dag uitmaken.
@Frank: Inderdaad maak je het mij duidelijk door de His eraan toe te voegen.
@Ger: De zomertijd! Die heb ik over het hoofd gezien. Bedankt voor de tip. Even verder puzzelen dus.

Dank!
Wellicht kan je [url=http://nl1.php.net/manual/en/book.datetime.php]hier[url] ook wat mee.
@Ger:
Inmiddels heb ik het opgelost door te testen op de week waarin zomer/wintertijd verandert.
De link zal ik eens bekijken of daar ook en oplossing tussen zit.
Dank.

[size=xsmall]Toevoeging op 14/01/2014 09:24:36:[/size]

Oplossing heb ik gevonden in het verhogen van de unix timestamp met 12 uur.
ik denk dat je met datetime en modify(+7 day) of next monday. beter af bent:
Dan wordt die controle op zomertijd vanzelf gedaan, en wordt evt. ook nog rekening gehouden met de timezone en evt. afwijkingen in het moment van zomertijd.
Niet elk land kent zomertijd en niet overal wordt op dezelfde datum de zomer/wintertijd wisseling gedaan.

En aangezien je gewoon steeds een week verder wilt, lijkt het me nogal een omweg om via het aantal seconden sinds 1970 te gaan pielen.

<?php
$date = new datetime('2013-08-01'); 
$dateEnd = new datetime('2014-08-01');

while ($date < $dateEnd)
{
   $date->modify('next monday');
   echo $date->format('j-m-Y') . '<br>';
}
?>

Reageren