簡體   English   中英

在PHP中獲取每月最后一天日期的列表

[英]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_monthlast_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM