我有一个基于某些逻辑生成的html选择下拉列表。从我提供的那一年开始,它创建了给定的年份+第二年,并将其分解为每个月。
我将2016
传递给了我的职能部门,它在2016年产生了12个月,然后在2017年产生了12个月。这些投入的价值是每个月的最后一个日期。 Jan = 01/31/2016
,2月= 02/29/2016
,依此类推。
有一条逻辑说明如果今天的日期是月份的18号或更高,则无法选择月份。基本上每个月的第18个月是一个截止日期,以便提交项目。
这是我需要帮助的地方。并且需要添加额外的逻辑,您永远不能选择我们当前所在的月份。
示例:今天是1月14日,我应该选择的最快的选项是2016年2月(无法选择当月)。但是,如果今天是1月18日 - 1月31日,它已经过了第18个截止日期,我应该可以选择最快的月份是2016年3月。
function createYearSelect($from, $preSel, $intake)
{
// for each year from the one specified to the one after current
foreach (range($from, date('Y') + 1) as $year) {
// today
$today = strtotime("now");
// open optgroup for year
$result .= "<optgroup label=\"$year\">";
// foreach month
foreach (range(1, 12) as $month) {
// timestamp of first day
$time = strtotime("$year-$month-01");
$now = strtotime("now");
// timestamp of cutoff date
$cutoff = strtotime("$year-$month-18");
// Did the cutoff date pass?
if ($today > $cutoff) {
$dis = 'disabled="disabled"';
} else {
$dis = '';
}
// Set our default to the month/year we are currently in
if (date("m/Y", $time) == date("m/Y", $now)) {
$sel = 'selected="selected"';
} else {
$sel = '';
}
// If we need to pre-select something such as "Edit Mode"
if ($preSel) {
if (date("m/Y", $time) == date("m/Y", strtotime($preSel))) {
$sel = 'selected="selected"';
} else {
$sel = '';
}
}
// If intake mode, we disable options that have passed a set date, otherwise its open.
if ($intake) {
$result .= "<option value=\"" . date("m/t/Y", $time) . "\" " . $dis . $sel . ">" . date("F Y", $time) . ($dis ? ' (Exceeded Cutoff)' : '') . "</option>";
} else {
$result .= "<option value=\"" . date("m/t/Y", $time) . "\" " . $sel . ">" . date("F Y", $time) . "</option>";
}
}
// close optgroup for year
$result .= "</optgroup>";
}
return $result;
}
以下是目前提供的代码和输出: http://sandbox.onlinephpfunctions.com/code/71f5b5b1fcd34c018344b9acbe302f19ce94a45c
我的最终目标是不允许他们选择我们当前所在的月份,如果我们在当月超过18日,那么最快的将是2个月。
思想?
答案 0 :(得分:0)
试试这个。没有经过测试,但希望它能够朝着正确的方向发展。
if (date("m/Y", $time) == date("m/Y", $now) && date("d",$now) < 18) {
$sel = 'selected="selected"';
} else if (date("m/Y", $time) == date("m/Y", strtotime("+1 month")) && date("d",$now) >= 18) {
$sel = 'selected="selected"';
} else {
$sel = '';
}