簡體   English   中英

從PHP中的當前月份開始的Selectbox月份和年份

[英]Selectbox Months and Years starting with current month in PHP

我希望你們能為我解決PHP和Wordpress問題。 目前,我有2個selectboxes, 日期和另一個至今那同時列出了一月份和年份。 當前日期從當年的一月開始,但是我需要它們從當年的月和年開始,然后打印2年。

這是當前代碼:

<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月結束,介於這兩個月之間。 如果有人可以將正確的方向指向我,將“更改日期”更改為該月的第一天而不是該月的第一天,那么這也將非常有幫助。

任何想法將不勝感激。

非常感謝!

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

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

“ P1M”代表:

P為“句號

1個持續時間

M個月

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

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

我添加了一個參數$formatUseLastDayOfMonth以將“ To”日期設置為該月的最后一天。 此選項可以使用t選項在format方法中指定。

從文檔中:

t用作給定月份的天數( function.date

因為您使用了2次select元素,所以我創建了一個將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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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