ID:               49115
 User updated by:  php at davidstockton dot com
 Reported By:      php at davidstockton dot com
 Status:           Bogus
 Bug Type:         Date/time related
 Operating System: Windows XP/Linux
 PHP Version:      5.2.10
 New Comment:

Sorry to belabor the point, but why is "February 2009" reset to
February 1, 2009 (since the day is not provided), but "February" is not?
 In that case the current year is used (not provided) and the current
day is used (also not provided).  In the February 2009 example the day
is not provided, but the day is reset to 1 which I think is a reasonable
adjustment.  I would think that February with an implied year matching
the current year should behave the same as February with an implied year
(no provided year).

Thank you again.


Previous Comments:
------------------------------------------------------------------------

[2009-07-31 08:34:03] der...@php.net

Yup, that's correct. With the "month year" format, we reset the day to
1. 

------------------------------------------------------------------------

[2009-07-31 03:55:41] php at davidstockton dot com

I guess my above assumption is not correct either which means there's
something else going on that I don't understand.  For example,

<?php
echo date('F', strtotime('February 2009')), "\n";

echo date('F', strtotime('February 1')), "\n";
?>

Both lines output the expected "February" even though I've not
specified a day of the month in the first scenario but the timestamp
given by strtotime corresponds to February 1, 2009.  If the function
fills in the defaults from the current date, I'd expect to still see
March for the 1st line.)

------------------------------------------------------------------------

[2009-07-31 02:57:44] php at davidstockton dot com

Interesting. So I'd guess that if I run this same test tomorrow, I'll
be seeing

January
March
March
May
May
July
July
August
October
October
December
December

I think I understand why it would be doing this, but it still seems
pretty weird.  Is the assumption that strtotime fills in every part of
the date/time with whatever the current time happens to be correct?)

------------------------------------------------------------------------

[2009-07-30 23:29:17] ras...@php.net

date() is doing what it is supposed to.  You are passing it a timestamp
in March.

strtotime() returns a timestamp in March because you have not been
specific enough.  When you just give it a month and nothing else, it
makes some assumptions.  For example, it takes the current year and the
current date.  So, you are asking strtotime for February 30, 2009 which
actually doesn't exist since February doesn't have 30 days, so it gives
you the closest match which is March 2nd.

Not a bug.  You just have to be more explicit.  Like "February 1"

------------------------------------------------------------------------

[2009-07-30 23:25:53] php at davidstockton dot com

Also, not sure if this is related, but the following code has similar
strange behavior:

for ($i = 1; $i <= 12; $i++) {
    echo date('F', gmmktime(0,0,0,$i)), "<br/>";
}

Output:
--------
January
March
March
April
May
June
July
August
September
October
November
December

Expected:
----------
January
February
March
April
May
June
July
August
September
October
November
December

I'd be happy to open a new defect if it's not related, or to be told
why these are correct behavior.

Thanks.

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/49115

-- 
Edit this bug report at http://bugs.php.net/?id=49115&edit=1

Reply via email to