我有以下代码来解析日期,减去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
答案 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)));