【问题标题】:Calendar drop down bug日历下拉错误
【发布时间】:2011-09-16 18:21:28
【问题描述】:

这应该很简单,但我无法解决它:/

我正在使用一个显示月份列表的组件,准确地说是即将到来的 12 个月。但是,过去 12 月时,年份不会更改为 2012 年。

请看这里: http://protekco.com/index.php/en/reservation.html

以及调用它的代码:

        echo AHtml::getMonthsSelect('imonth', (int) $month, $year, $currentMonth, $currentYear, $config->calendarDeepMonth, 'onchange="Calendars.monthNavigation(this.value)"'); ?>

$currentYear 是网站上显示的实际年份变量。如果我们已经过了年底,我基本上需要以某种方式添加 +1。有什么想法吗?

谢谢!

编辑:这里是月份数组:

 function getMonthsSelect($name, $selectedMonth, $selectedYear, $month, $year, $deep, $attribs = '')
{
    $months = array(1 => JText::_('January') , 2 => JText::_('February') , 3 => JText::_('March') , 4 => JText::_('April') , 5 => JText::_('May') , 6 => JText::_('June') , 7 => JText::_('July') , 8 => JText::_('August') , 9 => JText::_('September') , 10 => JText::_('October') , 11 => JText::_('November') , 12 => JText::_('December'));

    $stop = $month + $deep;
    for ($i = $month; $i < $stop; $i ++)
        $arr[] = JHTML::_('select.option', ($key = (! ($k = $i % 12) ? 12 : $k)) . ',' . ($y = (floor(($i - $month) / 12) + $year)), ($months[$key] . '/' . $y));

    return JHTML::_('select.genericlist', $arr, $name, $attribs, 'value', 'text', $selectedMonth . ',' . $selectedYear);
}

编辑 3:最终解决方案:

function getMonthsSelect($name, $selectedMonth, $selectedYear, $month, $year, $deep, $attribs = '')
{
    $months = array(1 => JText::_('January') , 2 => JText::_('February') , 3 => JText::_('March') , 4 => JText::_('April') , 5 => JText::_('May') , 6 => JText::_('June') , 7 => JText::_('July') , 8 => JText::_('August') , 9 => JText::_('September') , 10 => JText::_('October') , 11 => JText::_('November') , 12 => JText::_('December'));

    $stop = $month + $deep;
    $wheremonth = 12 - $month;
    for ($i = $month; $i < $stop; $i ++, $wheremonth--)

    if ($wheremonth >= 0) {
        $arr[] = JHTML::_('select.option', ($key = (! ($k = $i % 12) ? 12 : $k)) . ',' . ($y = (floor(($i - $month) / 12) + $year)), ($months[$key] . '/' . $y));
        }
        else {            $arr[] = JHTML::_('select.option', ($key = (! ($k = $i % 12) ? 12 : $k)) . ',' . ($y = (floor(($i - $month) / 12) + $year+1)), ($months[$key] . '/' . $y));
        }
    return JHTML::_('select.genericlist', $arr, $name, $attribs, 'value', 'text', $selectedMonth . ',' . $selectedYear);

        }

【问题讨论】:

    标签: php date datepicker


    【解决方案1】:

    不确定输入在这里是如何工作的,但你有下个月和上个月。您可以实现一个计数器变量,当您点击下一个时添加并在您点击上一个时减去。所以像:

    $i = 1;
    
    function datetracker() {
    
    if($nextbtnclicked = true) {
         $i++;
    } elseif($prevbtnclicked = true) {
         $i--;
    }
    
    if($i == 13) {
         $i = 1;
         $currentYear += 1;
    }
    }
    

    我只是使用示例变量,但是您可以在 Javascript 中实现计数器并在 JS 中进行登录。

    编辑:该代码实际上看起来是正确的。不知道为什么它不起作用,但试试这样的。

    function getMonthsSelect($name, $selectedMonth, $selectedYear, $month, $year, $deep, $attribs = '') 
    { 
        $months = array(1 => JText::_('January') , 2 => JText::_('February') , 3 => JText::_('March') , 4 => JText::_('April') , 5 => JText::_('May') , 6 => JText::_('June') , 7 => JText::_('July') , 8 => JText::_('August') , 9 => JText::_('September') , 10 => JText::_('October') , 11 => JText::_('November') , 12 => JText::_('December')); 
    
        $stop = $month + $deep;
        $newyear = false;
        for ($i = $month; $i < $stop; $i ++) {
    
            if($newyear) {
            $arr[] = JHTML::_('select.option', ($key = (! ($k = $i % 12) ? 12 : $k)) . ',' . ($y = (floor(($i - $month) / 12) + $year + 1)), ($months[$key] . '/' . $y));
             $newyear = false;
            } else {
            $arr[] = JHTML::_('select.option', ($key = (! ($k = $i % 12) ? 12 : $k)) . ',' . ($y = (floor(($i - $month) / 12) + $year)), ($months[$key] . '/' . $y));
    
            }
         if($i == 12) { $newyear = true; }
         }
    
        return JHTML::_('select.genericlist', $arr, $name, $attribs, 'value', 'text', $selectedMonth . ',' . $selectedYear); 
    } 
    

    【讨论】:

    • 感谢您的帮助;已经有 Currentmonth 和 NextYear 等变量。它们适用于大底部日历。单击日历底部的 Next Month 链接时,它会在当前月份值上加 +1,直到达到 12。然后它会在当前年份上加 +1 值并将 currentmonth 重置为 1 等等。我只是不知道如何在下拉选择框中完成预加载!
    • 那么您必须跟踪您是否已经使用了某个月份。当您循环添加月份时,可能会构建一个 $month 数组。每次循环时检查数组,如果 $month 存在,则设置 $currentYear + 1。
    • 这听起来像是一个完美的解决方案。但是,我真的不熟悉构建数组,如果您可以删除一两行代码,将不胜感激!
    • php.net 手册可能会更好地解释:php.net/array 并检查值是否在数组中:php.net/in_array
    • Ive been reading on it but really not sure how to actually implement that, my drop down only contains one line that already seems to call an array, as it understands when to switch back to January. Im 只是不确定它来自哪里,或者我如何让它明白它同时切换到 Jan,然后将 +1 添加到 currentYear
    猜你喜欢
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多