ID: 33957 Updated by: [EMAIL PROTECTED] Reported By: paul at stunning-stuff dot com -Status: Assigned +Status: Closed Bug Type: Date/time related Operating System: * PHP Version: 5CVS-2005-08-02 Assigned To: derick New Comment:
This bug has been fixed in CVS. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. Thank you for the report, and for helping us make PHP better. Previous Comments: ------------------------------------------------------------------------ [2005-08-02 16:45:08] paul at stunning-stuff dot com Thanks for your quick reply and thanks for doing such a great job on PHP. You dev's really make this the best open source language today. I hope you are able to solve this problem (I'm sure you will). One more note though: This problem should reoccur every 28 years before and after 1992. This might help you in your testing. Thanks, Paul van der Maas --- www.stunning-stuff.com ------------------------------------------------------------------------ [2005-08-02 16:22:09] [EMAIL PROTECTED] Indeed a bug, will have a look at it - thanks for the reproducable case. ------------------------------------------------------------------------ [2005-08-02 16:19:09] paul at stunning-stuff dot com Here is some example code to reproduce the problem: <?php $timestamp = gmmktime(12, 0, 0, 12, 28, 1992); echo 'Week number for ' . gmdate('D M d, Y H:i:s', $timestamp) . ': ' . gmdate('W', $timestamp) . '<br>'; $timestamp = gmmktime(12, 0, 0, 12, 29, 1992); echo 'Week number for ' . gmdate('D M d, Y H:i:s', $timestamp) . ': ' . gmdate('W', $timestamp) . '<br>'; $timestamp = gmmktime(12, 0, 0, 12, 30, 1992); echo 'Week number for ' . gmdate('D M d, Y H:i:s', $timestamp) . ': ' . gmdate('W', $timestamp) . '<br>'; $timestamp = gmmktime(12, 0, 0, 12, 31, 1992); echo 'Week number for ' . gmdate('D M d, Y H:i:s', $timestamp) . ': ' . gmdate('W', $timestamp) . '<br>'; $timestamp = gmmktime(12, 0, 0, 12, 28, 2020); echo 'Week number for ' . gmdate('D M d, Y H:i:s', $timestamp) . ': ' . gmdate('W', $timestamp) . '<br>'; $timestamp = gmmktime(12, 0, 0, 12, 29, 2020); echo 'Week number for ' . gmdate('D M d, Y H:i:s', $timestamp) . ': ' . gmdate('W', $timestamp) . '<br>'; $timestamp = gmmktime(12, 0, 0, 12, 30, 2020); echo 'Week number for ' . gmdate('D M d, Y H:i:s', $timestamp) . ': ' . gmdate('W', $timestamp) . '<br>'; $timestamp = gmmktime(12, 0, 0, 12, 31, 2020); echo 'Week number for ' . gmdate('D M d, Y H:i:s', $timestamp) . ': ' . gmdate('W', $timestamp) . '<br>'; ?> Expected result: Week number for Mon Dec 28, 1992 12:00:00: 53 Week number for Tue Dec 29, 1992 12:00:00: 53 Week number for Wed Dec 30, 1992 12:00:00: 53 Week number for Thu Dec 31, 1992 12:00:00: 53 Week number for Mon Dec 28, 2020 12:00:00: 53 Week number for Tue Dec 29, 2020 12:00:00: 53 Week number for Wed Dec 30, 2020 12:00:00: 53 Week number for Thu Dec 31, 2020 12:00:00: 53 Actual result: Week number for Mon Dec 28, 1992 12:00:00: 1 Week number for Tue Dec 29, 1992 12:00:00: 1 Week number for Wed Dec 30, 1992 12:00:00: 1 Week number for Thu Dec 31, 1992 12:00:00: 1 Week number for Mon Dec 28, 2020 12:00:00: 1 Week number for Tue Dec 29, 2020 12:00:00: 1 Week number for Wed Dec 30, 2020 12:00:00: 1 Week number for Thu Dec 31, 2020 12:00:00: 1 Check http://www.timeanddate.com/calendar/custom.html?year=1992&month=12&typ=1&display=1&wno=1 and http://www.timeanddate.com/calendar/custom.html?year=2020&month=12&typ=1&display=1&wno=1 to see these expected results confirmed. Sorry for the bulky post, but this way there is no room for misinterpretation. Thanks, Paul van der Maas --- www.stunning-stuff.com ------------------------------------------------------------------------ [2005-08-02 03:27:51] paul at stunning-stuff dot com Description: ------------ Hi, While I was writing my own getWeekNumber method I discovered gmdate('W') and date('W') both return incorrect results for the year 1992 and 2020. Both years end on a thursday and both are leap years. I'm guessing that this is exactly the reason they return incorrect results :). Expected result: The last 4 days in 1992 and 2020 belong to week 53 of those years according to ISO 8601 rules. Actual result: gmdate('W') and date('W') think the last 4 days of 1992 and 2020 belong to week 1 of the following year. I only had the time to test these two years, but I expect that PHP will return the incorrect week number for every leap year that ends with a thursday. Thanks, Paul van der Maas --- www.stunning-stuff.com ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=33957&edit=1
