![](/img/trans.png)
[英]create 3 selectbox(months, days, years) php looping options for each and Javascript to change options for `days` when `months` changes
[英]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月結束,介於這兩個月之間。 如果有人可以將正確的方向指向我,將“更改日期”更改為該月的第一天而不是該月的第一天,那么這也將非常有幫助。
任何想法將不勝感激。
非常感謝!
也許您可以使用DateTime , DateInterval和DatePeriod生成選擇元素的日期。
對於DateInterval
您可以這樣指定1個月: DateInterval('P1M');
“ P1M”代表:
P為“句號
1個持續時間
M個月
然后,您可以創建一個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.