Re: date weirdness

From: Date: Tue, 18 Sep 2007 22:45:37 +0000
Subject: Re: date weirdness
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-262222@lists.php.net to get a copy of this message
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! ...........................................................

« previous php.general (#262222) next »