user5483305
user5483305

Reputation:

get last date in month error

I have the following code which gets the date parsed, the subtracts 1 month. This works perfectly.

$date = '22-05-2016';
print(date("Y-m-d 23:59:59", strtotime($date.' -1 months')));
// outputs 2016-04-22 23:59:59

There are times where I need to force the date to month end. For this I use Y-m-t instead of Y-m-d Which works perfectly.

$date = '22-05-2016';
print(date("Y-m-t 23:59:59", strtotime($date.' -1 months')));
// outputs 2016-04-30 23:59:59


The problem comes when the date that is parsed is actually the last day of that month. It then flips to end of the next month.

$date = '31-05-2016';
print(date("Y-m-t 23:59:59", strtotime($date.' -1 months')));

Actual Output 2016-05-31 23:59:59 (hasn't removed 1 month)

Desired Output 2016-04-30 23:59:59

EDIT: Fiddle example http://ideone.com/0fqlor

Upvotes: 1

Views: 474

Answers (2)

JustOnUnderMillions
JustOnUnderMillions

Reputation: 3795

Try:

 $date = '31-05-2016';
 print(date("Y-m-d 23:59:59", strtotime($date.'  last day of last month')));

and dig into strtotime possibilities ;)

Take a look here: http://php.net/manual/en/datetime.formats.relative.php

Last Note: -1 month only gets 30 days back in time. Therefore it will not work allways. Some kind of PHP stuff, i think ;)

Upvotes: 2

dognose
dognose

Reputation: 20899

strtotime is your friend. The last day of any "given" month can be retrieved using the verbal String last day of May 2015 - so, for easy input (guess you have a date-picker not a month-picker), convert the selected date to its month expression first:

date_default_timezone_set('Europe/London');
$to = '31-05-2016';
$month = date("M Y", strtotime($to));
$strtotime_expression = "last day of " . $month;
echo $strtotime_expression.": <br />";
print(date("Y-m-t 23:59:59", strtotime($strtotime_expression)));

http://ideone.com/YvjVeP

Upvotes: 0

Related Questions