我有点不确定为什么无法找到上个月的最后一天。除非创建了最终日期,否则每个步骤似乎都能正常工作。
<?php
$currentMonth = date('n');
$currentYear = date('Y');
if($currentMonth == 1) {
$lastMonth = 12;
$lastYear = $currentYear - 1;
}
else {
$lastMonth = $currentMonth -1;
$lastYear = $currentYear;
}
if($lastMonth < 10) {
$lastMonth = '0' . $lastMonth;
}
$lastDayOfMonth = date('t', $lastMonth);
$lastDateOfPreviousMonth = $lastYear . '-' . $lastMonth . '-' . $lastDayOfMonth;
$newLastDateOfMonth = date('F j, Y', strtotime($lastDateOfPreviousMonth));
?>
$lastDateOfPreviousMonth
按预期返回2012-09-30;然而,在尝试将其转换为2012年9月30日后 - $newLastDateOfMonth
将于2012年10月1日返回。我在哪里出错?
编辑:如果在2013-01-01期间使用date("t/m/Y", strtotime("last month"));
或date('Y-m-d', strtotime('last day of previous month'));
,其中任何一项仍然可行,即他们是否会考虑年度变化?
答案 0 :(得分:70)
echo date('Y-m-d', strtotime('last day of previous month'));
//2012-09-30
或
$date = new DateTime();
$date->modify("last day of previous month");
echo $date->format("Y-m-d");
稍后修改:php.net documentation - relative formats for strtotime(), DateTime and date_create()
答案 1 :(得分:19)
这有一个PHP功能。
echo date("t/m/Y", strtotime("last month"));
答案 2 :(得分:4)
本月的第一天,减去1秒。
echo date('Y-m-d',strtotime('-1 second',strtotime(date('m').'/01/'.date('Y'))));
示例here。
答案 3 :(得分:1)
您可以使用strtotime()
的零处理功能来实现此目的:
# Day Before
echo date('Y-m-d', strtotime('2016-03-00')); // 2016-02-29
# Year can be handled too
echo date('Y-m-d', strtotime('2016-01-00')); // 2015-12-31
# Month Before
echo date('Y-m-d', strtotime('2016-00-01')); // 2015-12-01
# Month AND Day
echo date('Y-m-d', strtotime('2016-00-00')); // 2015-11-30
如果你认为00比第一个(01)少一个,那就没有意义。
所以为了实现这个问题的目标,“上个月的最后一天”是一个简单的例子
date('your_format', strtotime('YYYY-ThisMonth-00'));
# So:
date('Y-m-d', strtotime('2016-11-00')); // 2016-10-31
答案 4 :(得分:0)
请尝试以下答案。
代码:
echo date("t/m/Y", strtotime("-1 months"));
您将获得前12个月的最后一天。
示例:
<?php
for ($i = 1; $i <= 12; $i++) {
$months[] = date("t/m/Y l", strtotime(" -$i months"));
}
print_r($months);
?>
输出:
Array
(
[0] => 30/11/2018 Monday
[1] => 31/10/2018 Friday
[2] => 30/09/2018 Wednesday
[3] => 31/08/2018 Sunday
[4] => 31/07/2018 Thursday
[5] => 30/06/2018 Tuesday
[6] => 31/05/2018 Saturday
[7] => 30/04/2018 Thursday
[8] => 31/03/2018 Monday
[9] => 28/02/2018 Monday
[10] => 31/01/2018 Friday
[11] => 31/12/2017 Tuesday
)