RE: What's with 2016-11-06

From: Date: Tue, 25 Oct 2016 20:56:26 +0000
Subject: RE: What's with 2016-11-06
Groups: php.general 
Request: Send a blank email to php-general+get-325776@lists.php.net to get a copy of this message
Cliff Nieuwenhuis am Dienstag, 25. Oktober 2016 - 16:10: > This is a stripped-down version of a calendar program. Can anyone explain why November 6 2016 > appears twice? Or 2015-11-01? > > I'm assuming the fault lies with > > $calday = $calday + (60 * 60 * 24); > > ...but I'd like to know why some days apparently have less than 86400 seconds and how > (efficiently) to work around that. > > Here is my code: > > $calday = strtotime('2016-10-30'); > $finish = strtotime('2016-12-01'); > > while ( $calday < $finish ) { > for ($dow = 0; $dow < 7; $dow++) { > > // set the year, month, and day > $year = (int) date('Y', $calday); > $month = (int) date('n', $calday); > $day = (int) date('j', $calday); > > echo "Year: $year, Month: $month, Day: $day, Day of Week: $dow > <br />n"; > > // move on to the next day > $calday = $calday + (60 * 60 * 24); > } > echo "* * *<br />n"; > } > > Thanks in advance for any help. > Dear Cliff! You must care about the daylight savings. Indeed NOT every day has 86400 seconds. The simply addition fail for the switching days and this will brake all the rest in your calendar code. Solution: calculate the timestamp for every single day with the appropriate function - as you are doing with strtotime(). Good luck, Niklaus

« previous php.general (#325776) next »