Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 日历下拉错误_Php_Date_Datepicker - Fatal编程技术网

Php 日历下拉错误

Php 日历下拉错误,php,date,datepicker,Php,Date,Datepicker,这应该很简单,但我无法解决:/ 我使用的是一个显示月份列表的组件,确切地说是接下来的12个月。然而,这一年并没有改变到2012年12月 请看这里: 以及调用它的代码: echo AHtml::getMonthsSelect('imonth', (int) $month, $year, $currentMonth, $currentYear, $config->calendarDeepMonth, 'onchange="Calendars.monthNavigation(t

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

我使用的是一个显示月份列表的组件,确切地说是接下来的12个月。然而,这一年并没有改变到2012年12月

请看这里:

以及调用它的代码:

        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);
}
函数getmonthselect($name、$selectedMonth、$selectedYear、$month、$year、$deep、$attribs='')
{
$months=array(1=>JText:::(一月),2=>JText::(二月),3=>JText:(三月),4=>JText:(四月),5=>JText:(五月),6=>JText:(六月),7=>JText:(七月),8=>JText:(八月),9=>JText:(九月),10=>JText:(十月),11=>;
$stop=$month+$deep;
对于($i=$month;$i<$stop;$i++)
$arr[]=JHTML::(('select.option',($key=(!($k=$i%12)?12:$k)),',($y=(floor($i-$month)/12)+$year)),($months[$key]./'$y));
返回JHTML::(('select.genericslist'、$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);

        }
函数getmonthselect($name、$selectedMonth、$selectedYear、$month、$year、$deep、$attribs='')
{
$months=array(1=>JText:::(一月),2=>JText::(二月),3=>JText:(三月),4=>JText:(四月),5=>JText:(五月),6=>JText:(六月),7=>JText:(七月),8=>JText:(八月),9=>JText:(九月),10=>JText:(十月),11=>;
$stop=$month+$deep;
$wheremonth=12-$month;
对于($i=$month;$i<$stop;$i++,$wheremonth--)
如果($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));
}
返回JHTML::(('select.genericslist'、$arr、$name、$attribs、'value'、'text'、$selectedMonth'、'.$selectedYear');
}

不确定这里的输入是如何工作的,但您有下个月和上个月的输入。您可以实现一个计数器变量,该变量在单击“下一步”时进行加法,在单击“上一步”时进行减法。比如:

$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); 
} 
函数getmonthselect($name、$selectedMonth、$selectedYear、$month、$year、$deep、$attribs='')
{ 
$months=array(1=>JText:::(一月),2=>JText::(二月),3=>JText:(三月),4=>JText:(四月),5=>JText:(五月),6=>JText:(六月),7=>JText:(七月),8=>JText:(八月),9=>JText:(九月),10=>JText:(十月),11=>;
$stop=$month+$deep;
$newyear=false;
对于($i=$month;$i<$stop;$i++){
如果($新年){
$arr[]=JHTML::(($select.option’,($key=(!($k=$i%12)?12:$k))。,,,,($y=(楼层($i-$month)/12)+$year+1)),($months[$key]./'$y));
$newyear=false;
}否则{
$arr[]=JHTML::(('select.option',($key=(!($k=$i%12)?12:$k)),',($y=(floor($i-$month)/12)+$year)),($months[$key]./'$y));
}
如果($i==12){$newyear=true;}
}
返回JHTML::(('select.genericslist'、$arr、$name、$attribs、'value'、'text'、$selectedMonth'、'.$selectedYear');
} 

感谢您的帮助;已经有了Currentmonth和NextYear等变量。它们适用于大型底部日历。当单击日历底部的“下一个月”链接时,它会将当前月份值增加+1,直到达到12。然后,它会在当前年份中添加+1值,并将currentmonth重置为1,等等。我只是不知道如何在下拉选择框中完成预加载!那么,如果你已经使用了某个月,你必须跟踪。可能在循环添加月份时构建一个$month数组。每次循环时,您都会检查数组,如果$month存在,则设置$currentYear+1。这听起来是一个完美的解决方案。我真的不熟悉构建阵列,但是,如果您能删除一两行代码,将不胜感激!php.net手册可能在解释方面做得更好:为了检查值是否在数组中:我一直在阅读它,但确实不确定如何实际实现它,我的下拉列表中只包含一行似乎已经调用了数组,因为它知道何时切换回1月份。我不知道它从哪里来,也不知道如何让它明白,在切换到1月的同时,将+1添加到currentYear