这些答案并不能完全符合我的要求:
Getting last month's date in php How to find the last day of the month from date?
我有以下代码,用于打印一个选择框,其中包含指定日期的所有月份的最后一天:
$last_case_date = $this->query_end_date();
$increm_date = "2011-06-01";
echo '<select name = "end_interval">';
$increm_date = date('Y-m-d', strtotime("$increm_date"));
while($increm_date <= $last_case_date) {
// next date is $increm_date + 1 month
$increm_date = date('Y-m-d', strtotime("$increm_date + 1 months"));
// then we want the last day of this new date
$month = substr($increm_date, 5, 2);
$year = substr($increm_date, 0, 4);
$increm_date = $this->last_day_of_month($month, $year);
echo '<option value = "'.$increm_date.'" selected = "selected"'.'>'.$increm_date.'</option>';
}
echo '</select>';
last_day_of_month
就是这样:
function last_day_of_month($month = '', $year = '') {
if(empty($month)) {
$month = date('m');
}
if(empty($year)) {
$year = date('Y');
}
$result = strtotime("{$year}-{$month}-01");
$result = strtotime('-1 second', strtotime('+1 months', $result));
return date('Y-m-d', $result);
}
我从here借来的。
发生的奇怪事情是我得到这些日期:
2011-07-31
2011-08-31
2011-10-31
但没有2011-09-30
!它可能与9月只有30天或者其他事情有关吗?
有人能发现问题吗?我已经盯着它看了好几年....谢谢你:)。
答案 0 :(得分:2)
你可以使用php的内置函数
date('t', $timestamp);
所以你的功能看起来像是:
function last_day_of_month($month = '', $year = '') {
$month
|| $month = date('m');
$year
|| $year = date('y');
$timestamp = mktime(0, 0, 0, $month, 1, $year);
return date('Y-m-t', $timestamp);
}
答案 1 :(得分:1)
要获取当月的最后一天,请使用:
date('Y-m-t', strtotime("$year-$month-01"))
't'
代表“给定月份的天数”,即最后一天。无需添加和减去任何内容。
答案 2 :(得分:1)
下面将输出一个选择框,其中包含当前年度每个月最后一天的选项:
echo "<select>";
for($i=1;$i<=12;$i++){
echo "<option>".date('Y-m-t', strtotime(date("Y")."-".$i."-01"))."</option>";
}
echo "</select>";
如果您想设置为其他年份,只需将date("Y")
替换为"2010"
。例如,您可以循环使用多年,运行代码以输出每个选项。
答案 3 :(得分:0)
我认为这是你的代码问题:
原来的$ increm_date是“2011-06-01”;
while循环中的某个点$ increm_date是2011-08-31(八月的最后一天)
在你添加一个月的周期中所以$ increm_date是2011-10-01(10月的第一天,而不是9月的最后一天)所以你打电话给last_day_of_month提供OCTOBER NOT SEPTEMBER。
我不确定这一点。测试尝试在调用last_day_of_month之前打印$ increm_date