PHP条件日期下拉列表

时间:2016-01-14 18:24:01

标签: php date

我有一个基于某些逻辑生成的html选择下拉列表。从我提供的那一年开始,它创建了给定的年份+第二年,并将其分解为每个月。

enter image description here

我将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个月。

思想?

1 个答案:

答案 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 = '';
        }