On Tue, 2007-09-18 at 15:32 -0500, Greg Donald wrote: > I have extracted a small portion of a calendar application I developed > recently to show some strange behavior with the date() function. When I > run this I get duplicate dates occasionally down the list. I'm seeing > 11/4 twice for example. Sometimes dates are missing from the list. The > results change from day to day. > > #!/usr/bin/env php > <?php > > error_reporting( E_ALL ); > > define( 'SECONDS_IN_A_DAY', 60 * 60 * 24 ); > define( 'LAST_SUNDAY', strtotime( 'last Sunday' ) ); > > echo 'SECONDS_IN_A_DAY = ' . SECONDS_IN_A_DAY . "\n"; > echo 'LAST_SUNDAY = ' . LAST_SUNDAY . "\n"; > > for( $x = 0; $x < 365; $x++ ) > { > $seconds = LAST_SUNDAY + ( SECONDS_IN_A_DAY * $x ); > $date = date( 'n/j', $seconds ); > echo "$seconds $date\n"; > } > ?> > > I get the same results with latest PHP4 and PHP5. Using seconds is a hack that doesn't account for DST. Use the following instead: <?php error_reporting( E_ALL ); define( 'LAST_SUNDAY', strtotime( 'last Sunday' ) ); echo 'LAST_SUNDAY = ' . LAST_SUNDAY . "\n"; for( $x = 0; $x < 365; $x++ ) { $timestamp = strtotime( "+$x days", LAST_SUNDAY ); $date = date( 'n/j', $timestamp ); echo "$timestamp $date\n"; } ?> Cheers, Rob. -- ........................................................... SwarmBuy.com - http://www.swarmbuy.com Leveraging the buying power of the masses! ........................................................... -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php