Re: #18655 [Bgs->Csd]: strtotime() with "next Sunday"
| From: | Rasmus Lerdorf | Date: | Sat, 17 Aug 2002 17:49:29 +0000 |
| Subject: | Re: #18655 [Bgs->Csd]: strtotime() with "next Sunday" | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-86966@lists.php.net to get a copy of this message | ||
Yup, but it is one of those "clearly wrong" cases.
On Sat, 17 Aug 2002, Derick Rethans wrote:
> On 30 Jul 2002 rasmus@php.net wrote:
>
> > Yeah, reading a bit more it looks like you are right. I have fixed
> > this in CVS now. "next" maps to "2" now instead of "1"
>
> Doesn't this break backward compability?
>
> Derick
>
> >
> >
> > Previous Comments:
> > ------------------------------------------------------------------------
> >
> > [2002-07-30 14:28:58] m.ford@lmu.ac.uk
> >
> > That's *not* what the spec of strtotime at
> > http://www.gnu.org/manual/tar-1.12/html_chapter/tar_7.html
> > (linked from
> > http://www.php.net/manual/en/function.strtotime.php) says.
> >
> > I quote:
> >
> > "A number may precede a day of the week item to move forward
> > supplementary weeks. It is best used in expression like `third
> > monday'."
> >
> > and:
> >
> > "A few numbers may be written out in words in most contexts. ... Here
> > is the list:
first' for 1, next' for 2,
> > `third' for 3, ..."
> >
> > implying that "next sunday" should return the *second* Sunday from the
> > given date.
> >
> > And, indeed, the following does exactly what the original poster
> > intended:
> >
> > while($now<$date) {
> > echo date("l, F j, Y", $now)."<br>";
> > $now=strtotime("2 Sunday", $now);
> > }
> >
> > So the problem would appear to be that, notwithstanding the GNU
> > documentation, the PHP strtotime() interpretation of "next" is not, in
> > fact, equivalent to 2.
> >
> > Cheers!
> >
> > Mike
> >
> > ------------------------------------------------------------------------
> >
> > [2002-07-30 14:11:57] rasmus@php.net
> >
> > strtotime() will return the first sunday it finds after the given
> > timestamp in this case. So you really need to move the timestamp ahead
> > each time and ask it to find the next Sunday in order to prevent it
> > from finding the same Sunday again. Or perhaps keep adding 1 week
> > instead once you found the first one. Watch out for the daylight
> > savings switchover though.
> >
> > ------------------------------------------------------------------------
> >
> > [2002-07-30 13:57:20] thearcher@comcast.net
> >
> > The configure line is:
> > './configure' '--enable-ftp' '--enable-bc-math'
> > '--enable-gd-native-ttf' '--enable-inline-optimization'
> > '--enable-mbstring' '--enable-mbstr-enc-trans'
> > '--enable-sysvsem'
> > '--enable-sysvshm' '--enable-sockets' '--enable-track-vars'
> > '--enable-trans-sid' '--with-freetype-dir=/usr'
> > '--with-gd=/usr'
> > '--with-imap=/usr' '--with-imlib=/usr'
> > '--with-jpeg-dir=/usr'
> > '--with-kerberos=/usr/kerberos' '--with-mysql=/usr/local/mysql'
> > '--with-openssl=/usr' '--with-png-dir=/usr'
> > '--with-t1lib=/usr'
> > '--with-ttf=/usr' '--with-xml' '--with-xpm-dir=/usr/X11R6'
> > '--with-zlib-dir=/usr' '--with-apache=../apache_1.3.26'
> > '--with-snmp'
> > '--enable-ucd-snmp-hack'
> >
> > I was writing a script that was supposed to determine all the Sundays
> > between an entered date and the current date. I had a loop in which I
> > used "strtotime("next Sunday",$date)". This did not work and just
> > returned the sunday after the current date instead of the Sunday after
> > the timestamp i gave it. I had used an identical expression outside of
> > the loop and it correctly returned the next Sunday of the timestamp i
> > gave it.
> >
> > This script replicates the problem:
> > <?
> > $now=time();
> > $date=strtotime("November 24, 2002");
> > while($now<$date) {
> > echo date("l, F j, Y", $now)."<br>";
> > $now=strtotime("next Sunday", $now);
> > }
> > ?>
> >
> > That loop will never terminate as it logically should.
> >
> > ------------------------------------------------------------------------
> >
> >
> > --
> > Edit this bug report at
> > http://bugs.php.net/?id=18655&edit=1
> >
>
> ---------------------------------------------------------------------------
> Derick Rethans
> http://www.derickrethans.nl/
> JDI Media Solutions
> http://www.jdimedia.nl/
> ---------------------------------------------------------------------------
>
>