【问题标题】:Datepicker with month and year only日期选择器只有月份和年份
【发布时间】:2012-12-03 10:59:06
【问题描述】:

我想要一个日期选择器,用户只能从日期选择器中选择月份和年份,并且我还需要使用从上一个日期选择器中选择的月份和年份来限制下一个日期选择器..

谁能帮帮我?

【问题讨论】:

    标签: javascript jquery datepicker


    【解决方案1】:

    Sean 的回答很好,如果你也想禁用日期选择,你可以使用不同的方法,你可以在this fiddle 看到结果:

    日历是隐藏的,所以你只能选择月份和年份。在第一个日期选择器中选择日期时,第二个日期选择器的 minDate 正在适应。

    编辑

    当 dateformat 不提供日期时,jQuery datepicker 会出现严重问题。我更改了代码以使其工作。唯一的问题是在打开日期选择器时,我必须将日期转换为合适的格式。看看新的小提琴。

    HTML:

    <p>Date: <input type="text" id="first-datepicker"/></p>
    <p>Date: <input type="text" id="second-datepicker"/></p>
    

    CSS:

    #ui-datepicker-div .ui-datepicker-calendar,
    #ui-datepicker-div .ui-datepicker-current
    {
        display: none !important;
    }
    

    JAVASCRIPT:

    $('#first-datepicker').datepicker({
        changeYear: true,
        changeMonth: true,
        beforeShow: function (input, inst) {
            setMyDate(inst);
        },
        onClose: function (dateText, inst) {
            saveMyDate(inst);
    
            var secondDatePicker = $('#second-datepicker').data('datepicker');
            var dateSetted = secondDatePicker.input.data('date-setted');
    
            setMyDate(secondDatePicker);
    
            secondDatePicker.input.datepicker('option', 'minDate', new Date(inst.selectedYear, inst.selectedMonth, 0));     
    
            if (dateSetted == true) {
                saveMyDate(secondDatePicker);
            };
        }
    });
    
    $('#second-datepicker').datepicker({
        changeYear: true,
        changeMonth: true,
        beforeShow: function (input, inst) {
            setMyDate(inst);
        },
        onClose: function (dateText, inst) {
            saveMyDate(inst);
        }
    });
    
    function saveMyDate(inst) {
        inst.selectedDay = 1;
        inst.input.data('year', inst.selectedYear);
        inst.input.data('month', inst.selectedMonth);
        inst.input.data('day', inst.selectedDay );
    
        var date = new Date(inst.selectedYear, inst.selectedMonth, inst.selectedDay);
        inst.input.datepicker('setDate', date );
        formatDate(inst, date);
        inst.input.data('date-setted', true);
    };
    
    function setMyDate(inst) {
        var dateSetted = inst.input.data('date-setted');
    
        if (dateSetted == true) {
            var year = inst.input.data('year');
            var month = inst.input.data('month');
            var day = inst.input.data('day');
    
            var date = new Date(year, month, day);
            inst.input.datepicker('setDate', date );
        };
    };
    
    function formatDate(inst, date) {
        var formattedDate = $.datepicker.formatDate('MM - yy', date);
    inst.input.val(formattedDate);
    };
    

    【讨论】:

    • 其实如果你问我,你的答案比我早一英里=]
    • 嗨,西蒙,感谢您的回复。我用你提供的链接检查了你的代码。这真好。但是当我在选项中添加像dateFormat: 'MM - yy' 这样的日期格式时,它未能产生我期望得到的正确结果。
    • 非常感谢@Simon!惊人的!!它的工作..抱歉很晚才回复。你在摇摆!
    【解决方案2】:

    您可以修改 jQuery 日期选择器以仅允许用户选择某些日期,在这种情况下我们可以将其限制为每月的第一天:

    $(".datepicker").datepicker({
        beforeShowDay: disableDaysExceptFirst
    })
    
    function disableDaysExceptFirst(date) {
        if (date.getDate() != 1) {
            return [false, date.getDate().toString() + "_day"];
        }
        return [true, ""];
    }
    

    您还可以修改选项以不同方式显示日期:

    $(".datepicker").datepicker({
        dateFormat: 'mm/yy'
    });
    

    将两者结合,我们得到:

    $(".datepicker").datepicker({
        beforeShowDay: disableDaysExceptFirst,
        dateFormat: 'mm/yy'
    })
    
    function disableDaysExceptFirst(date) {
        if (date.getDate() != 1) {
            return [false, date.getDate().toString() + "_day"];
        }
        return [true, ""];
    }
    

    您也可以使用它来限制您的第二个日期选择器:

    var restrictedMonth = parseInt($("#myFirstDatePicker").text().split("/")[0]); //replace myFirstDatePicker with the HTML ID of the text input your datepicker is attached to
    
    $("#myFirstDatePicker").datepicker({
        beforeShowDay: disableAllExceptCurrentMonth,
        dateFormat: 'dd/mm/yy' //swap mm and dd for US dates
    });
    
    function disableAllExceptCurrentMonth(date) {
        if (date.getMonth() != restrictedMonth) {
            return [false, date.getDate().toString() + "_day"];
        }
        return [true, ""];
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用这个monthpicker jquery 小部件:https://github.com/lucianocosta/jquery.mtz.monthpicker

      【讨论】:

      • 感谢您的帮助@magus :)
      【解决方案4】:

      如果您可以在 html5 中工作,我建议您使用新的月份输入支持以支持较新的浏览器

      只需使用并让魔法发生。

      https://developer.mozilla.org/fr/docs/Web/HTML/Element/Input/month

      【讨论】:

      • 不适用于 Firefox(漏洞开放 6 年了)。也不适用于 Safari。
      猜你喜欢
      • 1970-01-01
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      相关资源
      最近更新 更多