WOW! Blindingly simple mistake --> couldn't see the forest before the trees (or something like that). THANKS for the helping hand!
Gnik --- Eugene Lee <[EMAIL PROTECTED]> wrote: > On Fri, Nov 14, 2003 at 08:53:41PM -0800, Gnik wrote: > : > : One of my servers required a PHP upgrade. Afterwards one of the PHP > : projects stopped functioning. When it would run one section would > : scroll endlessly. I can't figure out if it's a 'bug' or if it's bad > : logic in the coding. > > Bad logic. But it took me a while to figure it out. I'm glad I did; > I know it will save me countless headaches in the future! :-) > > : I isolated the problem to be in the 'strtotime' function. Here is a > : test I ran - when it runs, after getting to 2003-10-26, it scrolls > : incessently: > : > : ----BEGIN CODE------ > : <?php > : echo "<html><head><title>Testing strtotime </title></head>"; > : print " <BR>" ; > : $stop= "2003-12-27" ; > : $start= "2003-01-01" ; > : While ($start <> $stop) { > : echo "<BR> Date: " . $start ; > : $start = date('Y-m-d', strtotime($start) + 86400); > : } > : ?> > : ----END CODE------ > > It's a logic bug due to the wonderful world of Daylight Saving Time. > When the clock strikes 2003-10-26, adding 86400 seconds to calculate the > next day's timestamp is normally correct. However, that date is also > the last Sunday of Octobor when the U.S. officially reverts from > Daylight Saving Time back to normal time. Your next day's timestamp > "loses" one hour, i.e. 3600 seconds; your timestamp for 2003-10-27 12am > is now 2003-10-26 11pm. Because your date() call extracts only the > date, > your truncation error is causing you to get stuck on 2003-10-26. This > is > the cause of your infinite loop. > > There are several ways to avoid this problem. The easiest way to change > date() to gmdate(). This gets you on UTC time, which is independent of > Daylight Saving Time or your timezone. > > Hope this helps! -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php