[英]Getting a list of last day of month dates in PHP
這些答案並不能完全滿足我的要求:
在php中獲取上個月的日期 如何從日期中查找該月的最后一天?
我有以下代碼,該代碼用於打印帶有給定日期的月份中所有最后一天的選擇框:
$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
是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);
}
我從這里借來的。
發生的奇怪事情是我得到了這些日期:
2011-07-31 2011-08-31 2011-10-31
但沒有2011-09-30
! 它可能與9月只有30天有關嗎?
誰能發現問題? 我已經盯着它看了好多年了...。謝謝:)。
您可以只使用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);
}
要獲取該月的最后一天,請使用:
date('Y-m-t', strtotime("$year-$month-01"))
't'
代表“給定月份的天數”,即最后一天。 無需加減任何東西。
下面將輸出一個選擇框,其中包含當年每個月的最后一天的選項:
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"
。 例如,您可以循環運行數年,運行代碼以輸出每個選項。
我認為這是您的代碼段的問題:
原始的$ increm_date是“ 2011-06-01”;
而while周期$ increm_date中的某個時間點是2011-08-31(八月的最后一天)
在周期中您添加了一個月,因此$ increm_date是2011-10-01(十月的第一天,不是9月的最后一天),因此您調用last_day_of_month來提供10月的不是9月。
我不確定。 要進行測試,請嘗試在調用last_day_of_month之前打印$ increm_date
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.