2015-12-03 195 views
0

我希望你們可以幫我解決PHP和Wordpress的問題。目前我有2個選擇框,日期和另一個日期這列出了一個月和一年。目前的日期從今年一月份開始,但我需要它們在當前的月份和年份開始,然後打印兩年。選擇框月份和月份從PHP當前月份開始

下面是當前的代碼:

<div class="medium-4 small-6 columns"> 
    <label class="align-left"> 
    From: 
    <?php 
     $select_month_control = '<select name="from_date">'; 
     for($x = date("Y"); $x <= date("Y", strtotime('+1 year')); $x++) { 
     for($y = 1; $y <= 12; $y++) { 
      $month_val = $x.str_pad($y, 2, "0", STR_PAD_LEFT).'01'; 
      $select_month_control.= '<option value="' . $month_val . '" '; 
      if ($from_date === $month_val) { 
      $select_month_control .= 'selected="selected">'; 
      } 
      else { 
      $select_month_control .= '>'; 
      } 
      $select_month_control.= date('F',mktime(0,0,0,$y,1,$year)). " " . $x .' </option>'; 
     } 
     } 
     $select_month_control.= '</select>'; 
     echo $select_month_control; 
    ?> 
    </label> 
</div> 
<div class="medium-4 small-6 columns"> 
    <label class="align-left"> 
    To: 
    <?php 
     $select_month_control = '<select name="to_date">'; 
     $max_x = date("Y", strtotime('+2 year')); 
     for($x = date("Y"); $x <= $max_x; $x++) { 
     for($y = 1; $y <= 12; $y++) { 
      $month_val = $x.str_pad($y, 2, "0", STR_PAD_LEFT).'01'; 
      $select_month_control.= '<option value="' . $month_val . '" '; 
      if ($to_date === $month_val) { 
      $select_month_control .= 'selected="selected">'; 
      } 
      else if (empty($to_date) && $x == $max_x && $y === 12) { 
      $select_month_control .= 'selected="selected">'; 
      } 
      else { 
      $select_month_control .= '>'; 
      } 
      $select_month_control.= date('F',mktime(0,0,0,($y + 1),0,$year)). " " . $x .' </option>'; 
     } 
     } 
     $select_month_control.= '</select>'; 
     echo $select_month_control; 
    ?> 
    </label> 
</div> 

因此,如果該網站今天參觀了選擇框將開始與2015年12月和2017年與12月結束,其間所有月份。如果有人能夠指出我如何將To date更改爲本月的最後一天,而不是本月的第一天,那麼這也會非常有幫助。

任何想法將不勝感激。

非常感謝!

回答

1

也許你可以使用DateTimeDateIntervalDatePeriod來生成選擇元素的日期。

對於DateInterval可以指定1個月這樣的:DateInterval('P1M');

'P1M' 代表:

P對於「期間

的時間

M fo [R個月

http://php.net/manual/en/dateinterval.construct.php

然後,您可以創建一個DatePeriod並使用foreach循環創建<option>元素。

我已經添加了一個參數$formatUseLastDayOfMonth來將'To'日期設置爲月的最後一天。這是一個選項,可以使用t選項在format方法中指定。

從文檔:

使用牛逼的天在特定的月份 (function.date)的數量

因爲可以使用select元素的2倍,我創建了一個函數,它將select元素作爲字符串返回。

例如:

<?php 
/** 
* Create html select element which will contain options 
* for the given upcoming $numberOfMonths. The current month will be the default. 
* 
* @param int $numberOfMonths 
* @param int $selectedMonth 
* @param bool $formatUseLastDayOfMonth 
* 
* @return string 
*/ 
function getSelectForMonths($numberOfMonths, $selectedMonth = 0, $formatUseLastDayOfMonth = false) 
{ 
    // Add 1 month extra because the $datePeriod we are about to loop excludes the endDate 
    $numberOfMonths+=1; 
    $dateFormat = $formatUseLastDayOfMonth ? "Ymt" : "Ym01"; 
    $end = new DateTime(); 
    $end->modify(sprintf("+%s month", $numberOfMonths)); 

    $datePeriod = new DatePeriod(
     new DateTime(), 
     new DateInterval('P1M'), 
     $end 
    ); 

    $selectMonthControl = '<select name="from_date">'; 
    $monthCounter = 0; 
    foreach ($datePeriod as $date) { 
     $selectMonthControl .= sprintf(
      "<option value='%s'%s>%s</option>", 
      $date->format($dateFormat), 
      $selectedMonth === $monthCounter ? 'selected="selected"' : '', 
      $date->format('F Y') 
     ); 
     $monthCounter++; 
    } 
    $selectMonthControl .= "</select>"; 

    return $selectMonthControl; 
} 
?> 

然後你就可以使用它像這樣:

<div class="medium-4 small-6 columns"> 
    <label class="align-left"> 
     From: 
     <?php echo getSelectForMonths(24); ?> 
    </label> 
</div> 
<div class="medium-4 small-6 columns"> 
    <label class="align-left"> 
     To: 
     <?php echo getSelectForMonths(24, 24, true); ?> 
    </label> 
</div>