获取月份错误的最后日期

时间:2016-06-13 15:02:30

标签: php date

我有以下代码来解析日期,减去1个月。这非常有效。

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

有时我需要强制将日期强制到月末。为此,我使用Y-m-t代替Y-m-d,这非常有效。

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

<小时/> 当解析的日期实际上是该月的最后一天时,问题就出现了。然后翻到下个月末。

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

实际输出 2016-05-31 23:59:59 (已删除1个月)

期望输出 2016-04-30 23:59:59

编辑:小提琴示例http://ideone.com/0fqlor

2 个答案:

答案 0 :(得分:2)

尝试:

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

并深入研究strtotime种可能性;)

看看这里:http://php.net/manual/en/datetime.formats.relative.php

最后注意:-1 month只能回溯30天。因此它无论如何都不会起作用。我觉得某种PHP的东西;)

答案 1 :(得分:0)

strtotime是你的朋友。可以使用语言字符串last day of May 2015检索任何“给定”月份的最后一天 - 因此,为了便于输入(猜测您有日期选择器而不是月份选择器),将所选日期转换为其月份表达式第一:

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