在日历中获取活跃月份

时间:2012-12-14 09:06:28

标签: jquery jquery-ui jquery-ui-datepicker

我想在日历中获取当前活跃月份的月份。例如,当前月份(2012年12月)包括(但未显示)11月26日至30日,其中beforeShowDay(日期)函数包含在“日期”中循环时。我想在开始时获得12月'11'(基于0的索引),但无法找到如何得到它。

使用date.getMonth() + 1不起作用,因为它首先给我Novembers月号,但我想要Dec,因为那是日历中的选定月份。当我最终通过'date'进入循环时,我得到Dec,但是那时候已经很晚了。

任何想法如何得到这个?

2 个答案:

答案 0 :(得分:2)

var datePicker = $('#datepicker')
    datePicker.datepicker();
var date  =  datePicker.datepicker('getDate');

alert(date.getMonth())

将输出11(当前),但这仅在日历日期选择器初始化或显示后才起作用。这意味着如果您使用文档中的标记(输入字段),您将不会收到警报。解决方法可能是将datepicker设置为输入周围的div,并在输入获得或失去焦点时触发datepicker show / hide。

这个fiddle的内容。它有点难看,但它应该作为输入部分的解决方法:

var datePicker = $('#datepicker')
    datePicker.datepicker();
    datePicker.hide();

var date  =  datePicker.datepicker('getDate');

alert(date.getMonth());

$("[rel='#datepicker']").focus(function(){
   datePicker.show(); 
});

$("[rel='#datepicker']").blur(function(){
   datePicker.hide(); 
});

使用以下HTML:

<input rel='#datepicker' type='text'/>
<div id='datepicker'></div>​

<强>更新 您还会询问如何使用beforeShow方法获取日历的月份。我想到它的方式,你有两个选择。您可以将月份设置为覆盖defaultMonth选项,也可以是当前月份。如果您已经手动设置它,那么您已经拥有它,如果您没有,它可能与new Date().getMonth()中的数字相同(在这种情况下,正如您可能已经猜到的那样,11)< / p>

答案 1 :(得分:1)

如果我理解正确,这就是您要找的:http://jsfiddle.net/kACfV/

// Initially, set current date as the active month.
var activeMonth = new Date().getMonth() + 1;

$(function() {
    $("#datepicker").datepicker({ 
        // This is run before beforeShowDay(date).
        onChangeMonthYear: function (year, month, inst) {
            activeMonth = month; // Store active month when month is changed.
        },
        beforeShowDay: function (date) {
            // Do your logic here with activeMonth.
            console.log(date + " > " + activeMonth);
            return [true, ""]
        }
    });
});