Re: #18655 [Bgs->Csd]: strtotime() with "next Sunday"
| From: | Derick Rethans | Date: | Sat, 17 Aug 2002 17:52:58 +0000 |
| Subject: | Re: #18655 [Bgs->Csd]: strtotime() with "next Sunday" | ||
| References: | 1 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-86965@lists.php.net to get a copy of this message | ||
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/
---------------------------------------------------------------------------