|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2012-05-31 02:10 UTC] thomasrothwell dot 1990 at gmail dot com
Description:
------------
Came across the wrong month being returned when using the following:
<?php echo date('m', strtotime('+1 MONTH')); ?>
Expected: 06
Result: 07
I've only noticed this occur Today (31st of May 2012).
Altered my php.ini to use the following config as well:
date.timezone = "Australia/Sydney"
date.default_latitude = -35.308142
date.default_longitude = 149.124518
Thinking it could be a timezone issue. Also attempted use of gmdate.
What I found to work was:
<?php echo date('m', strtotime('first day of +1 month')); ?>
Expected: 06
Result: 06
Test script:
---------------
<?php
//Expected 06
echo date('m', strtotime('+1 MONTH'));
//Result 07
//Expected 06
echo gmdate('m', strtotime('+1 MONTH'));
//Result 07
//Expected 06
echo date('m', strtotime('first day of +1 month'));
//Result 06
Expected result:
----------------
060606
Actual result:
--------------
070706
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Oct 26 08:00:02 2025 UTC |
Assuming the issue is related to June only having 30 days, which then pushes it to the next month July. <?php 2 //Expected 30/06 3 echo date('d/m', strtotime('+1 MONTH')); 4 //Result 01/07 5 6 //Expected 30/06 7 echo gmdate('d/m', strtotime('+1 MONTH')); 8 //Result 01/07 9 10 //Expected 01/06 11 echo date('d/m', strtotime('first day of +1 month')); 12 //Result 01/06 Could be safe to assume that the function should check the limits of each month to prevent it from going past the extreme.Reproduced May 31st, 2013, CentOS 64Bit, PHP 5.4.15: foreach (['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] as $monthName) { echo "getdate(strtotime('$monthName'))['month'] = " . getdate(strtotime($monthName))['month'] . "\n"; echo "getdate(strtotime('$monthName'))['mon'] = " . getdate(strtotime($monthName))['mon'] . "\n"; }How this is an overflow issue: $timeStr = strtotime('Jun'); // just 'Jun' $date = getdate($timeStr); The date represented by $date should be in June, but it's not. Since I didn't specify a day it shouldn't be an overflow issue. If the day is assumed/implied by the current day then that should be documented. I would argue that since it is not specified, the 1st of the month at 0:00:00 is the safest assumption.