jQuery UI DatePicker केवल महीने वर्ष दिखाने के लिए


374

मैं अपने ऐप पर कैलेंडर प्रदर्शित करने के लिए jQuery दिनांक पिकर का उपयोग कर रहा हूं। मैं जानना चाहता हूं कि क्या मैं इसे महीने और साल (मई 2010) को प्रदर्शित करने के लिए उपयोग कर सकता हूं और कैलेंडर के लिए नहीं?


16
तो आप एक महीने पिकर चाहते हैं?
दीवाना हो गया

क्या आप jQueryUI DatePicker का उपयोग कर रहे हैं?
wpjmurray 16

हाँ। jQueryUI DatePicker
Aanu

6
यह आपके प्रश्न का उत्तर नहीं है, लेकिन हमारे पास अब यह है, बहुत बेहतर लगता है: eternicode.github.io/bootstrap-datepicker/…
रूबेन

बूटस्ट्रैप-डेटपिकर एक बंद रेपो की तरह लगता है, बिना किसी ध्यान देने योग्य काम के उन मुद्दों के साथ, जो उन्हें ठीक करने जा रहे हैं ...
कुमारहर्ष

जवाबों:


424

यहाँ एक हैक (संपूर्ण .html फ़ाइल के साथ अद्यतन किया गया है):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script>
    <link rel="stylesheet" type="text/css" media="screen" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/base/jquery-ui.css">
    <script type="text/javascript">
        $(function() {
            $('.date-picker').datepicker( {
            changeMonth: true,
            changeYear: true,
            showButtonPanel: true,
            dateFormat: 'MM yy',
            onClose: function(dateText, inst) { 
                $(this).datepicker('setDate', new Date(inst.selectedYear, inst.selectedMonth, 1));
            }
            });
        });
    </script>
    <style>
    .ui-datepicker-calendar {
        display: none;
    }
    </style>
</head>
<body>
    <label for="startDate">Date :</label>
    <input name="startDate" id="startDate" class="date-picker" />
</body>
</html>

उपरोक्त उदाहरण के लिए EDIT jsfiddle: http://jsfiddle.net/DBpJe/7755/

EDIT 2 केवल डोन बटन पर क्लिक करने पर महीने के मूल्य को इनपुट बॉक्स में जोड़ता है। इनपुट बॉक्स मानों को हटाने की अनुमति देता है, जो उपरोक्त फ़ील्ड में संभव नहीं है http://jsfiddle.net/DBpJe/5103/

EDIT 3 ने रेक्सवॉल्फ के समाधान के आधार पर बेहतर समाधान को अद्यतन किया।
http://jsfiddle.net/DBpJe/5106


14
'SetDate' को कॉल करने से कुछ ब्राउज़रों में पिकर फिर से खुल जाएगा। इसे रोकने के लिए, पिकर को अक्षम और सक्षम किया गया: $ (यह) .datepicker ('अक्षम'); $ (यह)। डेडपिकर ('सेटडेट', नई तारीख (वर्ष 1, माह 1, 1)); $ (this) .datepicker ( 'सक्षम');
स्वेन स्चनिचेंस

1
@ यहाँ एक विकल्प है:$(this).val($.datepicker.formatDate('MM yy', new Date(year, month, 1)));
ThiamTeck

1
मैं इस समाधान का उपयोग करने की कोशिश कर रहा हूं, लेकिन डेट डेट पर रिटर्न डेटेट का उपयोग करना आज ही शुरू करता है। क्या हो रहा है?
सुपरपोर्टी

1
मुझे लगता है कि ज्यादातर उदाहरण पृष्ठ पर ही इनलाइन शैलियों का उपयोग कर रहे हैं। यह एक समस्या होगी अगर किसी तरह आपको एक ही पृष्ठ पर एक से अधिक कैलेंडर (प्रत्येक अलग-अलग सेटिंग्स, उदाहरण के लिए) की आवश्यकता होती है। मैं इस तरह से .css फ़ाइल में शैलियों को जोड़ना पसंद करता हूं: #ui-datepicker-div.noCalendar .ui-datepicker-calendar, #ui-datepicker-div.noCalendar .ui-datepicker-header a {display: none;} #ui-datepicker-div.noCalendar .ui-datepicker-header .ui-datepicker-title{width: 100%; margin: 0;} और फिर व्यवहार में हेरफेर करने के लिए जावास्क्रिप्ट का उपयोग करें:$("#ui-datepicker-div").addClass('noCalendar');
poweratom

1
उपरोक्त उदाहरण पर यदि मैं टेक्स्ट बॉक्स को खाली करना चाहता हूं तो मैं नहीं कर सकता। क्या कोई मेरी मदद कर सकता है।
बीक

83

यह कोड मेरे लिए त्रुटिपूर्ण रूप से काम कर रहा है:

<script type="text/javascript">
$(document).ready(function()
{   
    $(".monthPicker").datepicker({
        dateFormat: 'MM yy',
        changeMonth: true,
        changeYear: true,
        showButtonPanel: true,

        onClose: function(dateText, inst) {
            var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            $(this).val($.datepicker.formatDate('MM yy', new Date(year, month, 1)));
        }
    });

    $(".monthPicker").focus(function () {
        $(".ui-datepicker-calendar").hide();
        $("#ui-datepicker-div").position({
            my: "center top",
            at: "center bottom",
            of: $(this)
        });
    });
});
</script>

<label for="month">Month: </label>
<input type="text" id="month" name="month" class="monthPicker" />

आउटपुट है:

यहां छवि विवरण दर्ज करें


इस कैलेंडर का कोई मान कैसे सेट कर सकता है
रफिक पुरुष

62

@ बेनेहलर , यह प्रीफेक्ट है! मैंने एक मामूली संशोधन किया ताकि एक बार से अधिक तारीख पिकर का एक ही उदाहरण का उपयोग करना अपेक्षित के रूप में काम करे। इस संशोधन के बिना तारीख को गलत तरीके से दर्ज किया गया है और पहले से चयनित तारीख को उजागर नहीं किया गया है।

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script>
    <link rel="stylesheet" type="text/css" media="screen" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/base/jquery-ui.css">
    <script type="text/javascript">
    $(function() {
        $('.date-picker').datepicker( {
            changeMonth: true,
            changeYear: true,
            showButtonPanel: true,
            dateFormat: 'MM yy',
            onClose: function(dateText, inst) { 
                var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
                var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
                $(this).datepicker('setDate', new Date(year, month, 1));
            },
            beforeShow : function(input, inst) {
                var datestr;
                if ((datestr = $(this).val()).length > 0) {
                    year = datestr.substring(datestr.length-4, datestr.length);
                    month = jQuery.inArray(datestr.substring(0, datestr.length-5), $(this).datepicker('option', 'monthNamesShort'));
                    $(this).datepicker('option', 'defaultDate', new Date(year, month, 1));
                    $(this).datepicker('setDate', new Date(year, month, 1));
                }
            }
        });
    });
    </script>
    <style>
    .ui-datepicker-calendar {
        display: none;
        }
    </style>
</head>
<body>
    <label for="startDate">Date :</label>
    <input name="startDate" id="startDate" class="date-picker" />
</body>
</html>

यह उत्तर अधिकतर सही है। हालाँकि, मुझे एमएम को एम को बदलने के लिए सही महीने का चयन करना होगा जब एक तारीख पहले से ही चयनित हो।
चाजक

18

उपरोक्त उत्तर बहुत अच्छे हैं। मेरी एकमात्र शिकायत यह है कि एक बार सेट होने के बाद आप मान को साफ़ नहीं कर सकते। इसके अलावा मैं विस्तार-jquery की तरह एक प्लगइन दृष्टिकोण पसंद करते हैं।

यह मेरे लिए एकदम सही काम करता है:

$.fn.monthYearPicker = function(options) {
    options = $.extend({
        dateFormat: "MM yy",
        changeMonth: true,
        changeYear: true,
        showButtonPanel: true,
        showAnim: ""
    }, options);
    function hideDaysFromCalendar() {
        var thisCalendar = $(this);
        $('.ui-datepicker-calendar').detach();
        // Also fix the click event on the Done button.
        $('.ui-datepicker-close').unbind("click").click(function() {
            var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            thisCalendar.datepicker('setDate', new Date(year, month, 1));
        });
    }
    $(this).datepicker(options).focus(hideDaysFromCalendar);
}

फिर ऐसा करें:

$('input.monthYearPicker').monthYearPicker();

2
अंत में मैं इसे डाउनवोट कर रहा हूं क्योंकि यह असेलेबल है, जैसा कि onSelect और / या onChangeMonthYear और / या onClose ईवेंट या तो फायर नहीं करते हैं, या सही मान प्राप्त नहीं करते हैं, या, यदि ओवरराइड करते हैं, तो विजेट को काम करना बंद करें
knocte

10
<style>
.ui-datepicker table{
    display: none;
}

<script type="text/javascript">
$(function() {
    $( "#manad" ).datepicker({
        changeMonth: true,
        changeYear: true,
        showButtonPanel: true,
        dateFormat: 'yy-mm',
        onClose: function(dateText, inst) { 
            var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            $(this).datepicker('setDate', new Date(year, month, 1));
        },
        beforeShow : function(input, inst) {
            if ((datestr = $(this).val()).length > 0) {
                actDate = datestr.split('-');
                year = actDate[0];
                month = actDate[1]-1;
                $(this).datepicker('option', 'defaultDate', new Date(year, month));
                $(this).datepicker('setDate', new Date(year, month));
            }
        }
    });
});

यह समस्या को हल करेगा =) लेकिन मैं समय-समय पर yyyy-mm चाहता था

केवल FF4 में हालांकि कोशिश की


JQuery में "yy" चार अंकों का वर्ष है। यदि आप यही चाहते हैं, तो आपने वह हासिल कर लिया है।
पावेल डिडा

9

मुझे आज भी यही चाहिए था और यह जीथब्यू पर मिला, jQueryUI के साथ काम करता है और कैलेंडर में दिनों की जगह महीने लेने वाला होता है

https://github.com/thebrowser/jquery.ui.monthpicker


5
बनाए नहीं रखा है, लेकिन एक कांटा है: github.com/zorab47/jquery.ui.monthpicker
denis.peplin

8

यहाँ मैं क्या लेकर आया हूँ। यह अतिरिक्त स्टाइल ब्लॉक की आवश्यकता के बिना कैलेंडर छुपाता है और इनपुट पर क्लिक करने के बाद मूल्य को स्पष्ट नहीं कर पाने की समस्या से निपटने के लिए एक स्पष्ट बटन जोड़ता है। साथ ही एक ही पृष्ठ पर कई महीने के लोगों के साथ अच्छी तरह से काम करता है।

HTML:

<input type='text' class='monthpicker'>

जावास्क्रिप्ट:

$(".monthpicker").datepicker({
    changeMonth: true,
    changeYear: true,
    dateFormat: "yy-mm",
    showButtonPanel: true,
    currentText: "This Month",
    onChangeMonthYear: function (year, month, inst) {
        $(this).val($.datepicker.formatDate('yy-mm', new Date(year, month - 1, 1)));
    },
    onClose: function(dateText, inst) {
        var month = $(".ui-datepicker-month :selected").val();
        var year = $(".ui-datepicker-year :selected").val();
        $(this).val($.datepicker.formatDate('yy-mm', new Date(year, month, 1)));
    }
}).focus(function () {
    $(".ui-datepicker-calendar").hide();
}).after(
    $("<a href='javascript: void(0);'>clear</a>").click(function() {
        $(this).prev().val('');
    })
);

5

मुझे दो फ़ील्ड्स (From & To) के लिए एक मंथली / ईयर पिकर की ज़रूरत थी और जब एक को चुना गया तो मैक्स / मिन को दूसरे पर सेट किया गया था ... एक ला पिकिंग एयरलाइन टिकट की तारीखें। मुझे अधिकतम और मिनट सेट करने में समस्या हो रही थी ... अन्य फ़ील्ड की तारीखें मिट जाएंगी। उपरोक्त पदों में से कई के लिए धन्यवाद ... मैंने आखिरकार इसका पता लगा लिया। आपको बहुत ही विशिष्ट क्रम में विकल्प और दिनांक निर्धारित करने होंगे।

पूर्ण समाधान के लिए इस पहेली को देखें: महीना / वर्ष पिकर @ JSFiddle

कोड:

var searchMinDate = "-2y";
var searchMaxDate = "-1m";
if ((new Date()).getDate() <= 5) {
    searchMaxDate = "-2m";
}
$("#txtFrom").datepicker({
    dateFormat: "M yy",
    changeMonth: true,
    changeYear: true,
    showButtonPanel: true,
    showAnim: "",
    minDate: searchMinDate,
    maxDate: searchMaxDate,
    showButtonPanel: true,
    beforeShow: function (input, inst) {
        if ((datestr = $("#txtFrom").val()).length > 0) {
            var year = datestr.substring(datestr.length - 4, datestr.length);
            var month = jQuery.inArray(datestr.substring(0, datestr.length - 5), "#txtFrom").datepicker('option', 'monthNamesShort'));
        $("#txtFrom").datepicker('option', 'defaultDate', new Date(year, month, 1));
                $("#txtFrom").datepicker('setDate', new Date(year, month, 1));
            }
        },
        onClose: function (input, inst) {
            var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            $("#txtFrom").datepicker('option', 'defaultDate', new Date(year, month, 1));
            $("#txtFrom").datepicker('setDate', new Date(year, month, 1));
            var to = $("#txtTo").val();
            $("#txtTo").datepicker('option', 'minDate', new Date(year, month, 1));
            if (to.length > 0) {
                var toyear = to.substring(to.length - 4, to.length);
                var tomonth = jQuery.inArray(to.substring(0, to.length - 5), $("#txtTo").datepicker('option', 'monthNamesShort'));
                $("#txtTo").datepicker('option', 'defaultDate', new Date(toyear, tomonth, 1));
                $("#txtTo").datepicker('setDate', new Date(toyear, tomonth, 1));
            }
        }
    });
    $("#txtTo").datepicker({
        dateFormat: "M yy",
        changeMonth: true,
        changeYear: true,
        showButtonPanel: true,
        showAnim: "",
        minDate: searchMinDate,
        maxDate: searchMaxDate,
        showButtonPanel: true,
        beforeShow: function (input, inst) {
            if ((datestr = $("#txtTo").val()).length > 0) {
                var year = datestr.substring(datestr.length - 4, datestr.length);
                var month = jQuery.inArray(datestr.substring(0, datestr.length - 5), $("#txtTo").datepicker('option', 'monthNamesShort'));
                $("#txtTo").datepicker('option', 'defaultDate', new Date(year, month, 1));
                $("#txtTo").datepicker('setDate', new Date(year, month, 1));
            }
        },
        onClose: function (input, inst) {
            var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            $("#txtTo").datepicker('option', 'defaultDate', new Date(year, month, 1));
            $("#txtTo").datepicker('setDate', new Date(year, month, 1));
            var from = $("#txtFrom").val();
            $("#txtFrom").datepicker('option', 'maxDate', new Date(year, month, 1));
            if (from.length > 0) {
                var fryear = from.substring(from.length - 4, from.length);
                var frmonth = jQuery.inArray(from.substring(0, from.length - 5), $("#txtFrom").datepicker('option', 'monthNamesShort'));
                $("#txtFrom").datepicker('option', 'defaultDate', new Date(fryear, frmonth, 1));
                $("#txtFrom").datepicker('setDate', new Date(fryear, frmonth, 1));
            }

        }
    });

जैसा कि ऊपर बताया गया है, इसे स्टाइल ब्लॉक में भी जोड़ें:

.ui-datepicker-calendar { display: none !important; }

5

मैंने उपरोक्त कई अच्छे उत्तरों को जोड़ा और इस पर पहुंचा:

    $('#payCardExpireDate').datepicker(
            {
                dateFormat: "mm/yy",
                changeMonth: true,
                changeYear: true,
                showButtonPanel: true,
                onClose: function(dateText, inst) { 
                    var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
                    var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
                    $(this).datepicker('setDate', new Date(year, month, 1)).trigger('change');
                },
                beforeShow : function(input, inst) {
                    if ((datestr = $(this).val()).length > 0) {
                        year = datestr.substring(datestr.length-4, datestr.length);
                        month = datestr.substring(0, 2);
                        $(this).datepicker('option', 'defaultDate', new Date(year, month-1, 1));
                        $(this).datepicker('setDate', new Date(year, month-1, 1));
                    }
                }
            }).focus(function () {
                $(".ui-datepicker-calendar").hide();
                $("#ui-datepicker-div").position({
                    my: "center top",
                    at: "center bottom",
                    of: $(this)
                });
            });

यह काम करने वाला साबित होता है, लेकिन कई बग्स का सामना करना पड़ता है, इसलिए मुझे डेटापीटर के कई स्थानों में पैच करने के लिए मजबूर किया गया था:

if($.datepicker._get(inst, "dateFormat") === "mm/yy")
{
    $(".ui-datepicker-calendar").hide();
}

पैच 1: _showDatepicker में: छुपाने के लिए;

पैच 2: _checkOffset में: माह पिकर पोजीशनिंग को ठीक करने के लिए (अन्यथा जब क्षेत्र ब्राउज़र के निचले भाग में है, ऑफ़सेट चेक बंद है);

पैच 3: onhhideDatepicker के onClose में: अन्यथा दिनांक फ़ील्ड बंद करने पर बहुत कम समय के लिए फ्लैश होगा जो बहुत कष्टप्रद है।

मुझे पता है कि मेरा फिक्स अच्छा से दूर था लेकिन अब यह काम कर रहा है। आशा है ये मदद करेगा।


JUst इस पंक्ति कोShow से पहले जोड़ें: {inst.dpDiv.addClass ('month_year_datepicker')}। चमकती तारीखें बंद हो जाएँगी :)। इसके अलावा मुझे लगता है कि .focus की जरूरत नहीं होगी
Parag

5

एक और सरल समाधान जोड़ें

 $(function() {
    $('.monthYearPicker').datepicker({
        changeMonth: true,
        changeYear: true,
        showButtonPanel: true,
        dateFormat: 'M yy'
    }).focus(function() {
        var thisCalendar = $(this);
        $('.ui-datepicker-calendar').detach();
        $('.ui-datepicker-close').click(function() {
var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
thisCalendar.datepicker('setDate', new Date(year, month, 1));
        });
    });
});

http://jsfiddle.net/tmnasim/JLydp/
विशेषताएं :

  • केवल माह / वर्ष प्रदर्शित करें
  • केवल डोने बटन पर क्लिक करने पर महीने के मूल्य को इनपुट बॉक्स में जोड़ता है
  • "पूरा" पर कोई "फिर से खोलना" व्यवहार नहीं है
    ------------------------------------
    एक और उपाय जो काम करता है एक ही पृष्ठ में तारीख और महीने की तारीख के लिए अच्छी तरह से: (भी म्यूटेंट के बग से बचने के लिए IE में पिछले बटन पर क्लिक करें, अगर हम फोकस फ़ंक्शन का उपयोग करते हैं तो हो सकता है)
    जेएस फिडल लिंक

4

क्या यह सिर्फ मैं है या यह IE (8) में काम नहीं करना चाहिए? जब क्लिक किया जाता है, तो तारीख बदल जाती है, लेकिन डेटपिकर फिर से खुल जाता है, जब तक कि आप वास्तव में पृष्ठ पर कहीं क्लिक न करें कि इनपुट इनपुट पर ध्यान केंद्रित करें ...

मैं इसे सुलझाने में देख रहा हूं।

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script>
    <link rel="stylesheet" type="text/css" media="screen" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/base/jquery-ui.css">
<script type="text/javascript">
$(function() {
    $('.date-picker').datepicker( {
        changeMonth: true,
        changeYear: true,
        showButtonPanel: true,
        dateFormat: 'MM yy',
        onClose: function(dateText, inst) { 
            var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            $(this).datepicker('setDate', new Date(year, month, 1));
        }
    });
});
</script>
<style>
.ui-datepicker-calendar {
    display: none;
    }
</style>
</head>
<body>
    <label for="startDate">Date :</label>
    <input name="startDate" id="startDate" class="date-picker" />
</body>
</html>

1
$ (this) .datepicker ( 'अक्षम'); $ (यह)। डेडपिकर ('सेटडेट', नई तिथि (वर्ष, माह, 1)); $ (this) .datepicker ( 'सक्षम'); समस्या हल करता है।
टॉम वान शूर

1
यह कोई उत्तर नहीं है
13

4

यदि आप एक महीने की तलाश में हैं, तो यह jquery.mtz.monthpicker आज़माएं

इसने मेरे लिए अच्छा काम किया।

options = {
    pattern: 'yyyy-mm', // Default is 'mm/yyyy' and separator char is not mandatory
    selectedYear: 2010,
    startYear: 2008,
    finalYear: 2012,
    monthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
};

$('#custom_widget').monthpicker(options);

लिंक मर चुका है। इस साइट तक नहीं पहुंचा जा सकता है | lucianocosta.info का सर्वर DNS पता नहीं मिल सका।
पंग

1
: यहाँ एक अद्यतन कड़ी है lucianocosta.com.br/jquery.mtz.monthpicker
सेबस्टियन एस

अपडेटेड लिंक भी टूटा हुआ है।
nasch

4

कई अन्य लोगों की तरह, मैंने कई समस्याओं का सामना करने की कोशिश की है, और केवल पोस्ट किए गए समाधानों का एक संयोजन, और अंततः इसे पूर्ण बनाने के लिए एक बड़ी हैक, मुझे एक समाधान उतरा है।

इस सूत्र में अन्य समाधानों के साथ समस्याएँ जो मैंने कोशिश की हैं:

  1. किसी तिथि-निर्धारण में एक नई तारीख का चयन करना, अन्य तारीखों की (आंतरिक) तारीख को भी बदल देगा, इसलिए जब आपने अन्य लोगों को फिर से खोला (या उनकी तिथि प्राप्त करने की कोशिश की), तो उनके असाइन किए गए इनपुट में प्रदर्शित की तुलना में एक अलग तारीख होगी -खेत।
  2. तारीख को दोबारा खोलने पर तारीख याद नहीं होगी।
  3. तारीखों की बाजीगरी के लिए कोड सबस्ट्रिंग का उपयोग करता है इसलिए यह सभी प्रारूपों के साथ संगत नहीं था।
  4. "माई महीनेपिकर" ने केवल जब भी मूल्यों को बदल दिया गया था, तब इसे बंद करने पर इनपुट-फ़ील्ड को बदल दिया।
  5. इनपुट-फ़ील्ड को सही ढंग से अपडेट नहीं किया जाता है, यदि आप किसी दिनांक के लिए गलत रूप से स्वरूपित इनपुट-स्ट्रिंग में टाइप करते हैं, और उसके बाद तारीख पर 'बंद' पर क्लिक करें।
  6. मेरे पास सामान्य डेटपिकर्स नहीं हो सकते हैं, जो दिनों को दिखाते हैं, उसी पृष्ठ पर महीनेपिकर्स के रूप में, जो दिनों को नहीं दिखाते हैं।

मैंने आखिरकार इन सभी समस्याओं को ठीक करने का एक तरीका ढूंढ लिया है । पहले चार को केवल इस बात से सावधान रहने के द्वारा तय किया जा सकता है कि आप अपने आंतरिक कोड में अपनी तिथि और महीने के संदर्भों को कैसे संदर्भित करते हैं, और निश्चित रूप से अपने पिकर का कुछ मैनुअल अपडेट कर रहे हैं। यह आप नीचे के निकट तात्कालिकता-उदाहरणों में देख सकते हैं। पांचवीं समस्या को कुछ कस्टम कोड को डेटपिक फ़ंक्शन में जोड़कर मदद की जा सकती है।

नोट: आपको अपनी सामान्य तिथि-सूची में पहले तीन समस्याओं को ठीक करने के लिए निम्न महीने के स्क्रिप्ट का उपयोग करने की आवश्यकता नहीं है। बस इस पोस्ट के नीचे डेटापिक इंस्टेंटेशन-स्क्रिप्ट का उपयोग करें।

अब, महीनेपिकर्स का उपयोग करने के लिए और आखिरी समस्या को ठीक करने के लिए, हमें तारीखों और महीने के लोगों को अलग करने की आवश्यकता है। हम वहाँ से बाहर कुछ jQuery- यूआई महीनेपॉन्डर्स addons में से एक मिल सकता है, लेकिन कुछ स्थानीयकरण लचीलापन / क्षमता, कुछ कमी एनीमेशन समर्थन ... तो, क्या करना है? तारीख-कोड से अपना "स्वयं" रोल करें! यह आपको पूरी तरह से काम करने वाले महीने के लिए मिलता है, तारीख के सभी कार्यात्मकताओं के साथ, बस दिनों के प्रदर्शन के बिना।

मैंने jQuery- UI v1.11.1 कोड के साथ नीचे वर्णित विधि का उपयोग करते हुए एक महीने की js-script और साथ में CSS-script की आपूर्ति की है । बस इन कोड-स्निपेट्स को क्रमशः दो नई फाइलों, महीनेपिक.जेएस और एक महीने की कॉपी में जमा करें।

यदि आप उस सरल प्रक्रिया के बारे में पढ़ना चाहते हैं जिसके द्वारा मैंने एक महीने में तारीख को बदल दिया है, तो अंतिम अनुभाग तक स्क्रॉल करें।


अब पेज पर तारीख और महीने के जोड़े जोड़ने के लिए!

ये निम्नलिखित जावास्क्रिप्ट कोड-स्निपेट पृष्ठ पर कई तारीखों और / या महीने के साथ काम करते हैं , पूर्वोक्त समस्याओं के बिना! आम तौर पर '$ (यह) का उपयोग करके तय किया गया।' बहुत :)

पहली स्क्रिप्ट एक सामान्य तारीख के लिए है, और दूसरी "नए" महीने के लोगों के लिए है।

आउट-टिप्पणी की गई। इसके बाद , जो आपको इनपुट-फ़ील्ड को खाली करने के लिए कुछ तत्व बनाने देता है, पॉल रिचर्ड्स के उत्तर से चुरा लिया जाता है।

मैं अपनी महीने की टिकर में "MM yy" प्रारूप का उपयोग कर रहा हूं, और मेरी तिथि-तिथि में 'yy-mm-dd' प्रारूप, लेकिन यह सभी प्रारूपों के साथ पूरी तरह से संगत है , इसलिए आप जिसे चाहें उपयोग कर सकते हैं। बस 'dateFormat' विकल्प बदलें। मानक विकल्प 'showButtonPanel', 'showAnim', और 'yearRange' निश्चित रूप से आपकी इच्छाओं के लिए वैकल्पिक और अनुकूलन योग्य हैं।


एक खजूर जोड़ना

खजूर का तात्पर्य। यह एक 90 साल पहले और वर्तमान दिन से चला जाता है। यह आपको इनपुट-फील्ड को सही रखने में मदद करता है, खासकर यदि आप डिफॉल्ट डेट, मिनेट और मैक्सडेट विकल्पों को सेट करते हैं, लेकिन यदि आप नहीं करते हैं तो इसे संभाल सकते हैं। यह आपके द्वारा चुनी गई किसी भी तारीख के साथ काम करेगा।

        $('#MyDateTextBox').datepicker({
            dateFormat: 'yy-mm-dd',
            changeMonth: true,
            changeYear: true,
            showButtonPanel: true,
            showMonthAfterYear: true,
            showWeek: true,
            showAnim: "drop",
            constrainInput: true,
            yearRange: "-90:",
            minDate: new Date((new Date().getFullYear() - 90), new Date().getMonth(), new Date().getDate()),
            maxDate: new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()),
            defaultDate: new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()),

            onClose: function (dateText, inst) {
                // When onClose is called after we have clicked a day (and not clicked 'Close' or outside the datepicker), the input-field is automatically
                // updated with a valid date-string. They will always pass, because minDate and maxDate are already enforced by the datepicker UI.
                // This try is to catch and handle the situations, where you open the datepicker, and manually type in an invalid date in the field,
                // and then close the datepicker by clicking outside the datepicker, or click 'Close', in which case no validation takes place.
                try {
                    // If datepicker can parse the date using our formatstring, the instance will automatically parse
                    // and apply it for us (after the onClose is done).
                    // If the input-string is invalid, 'parseDate' will throw an exception, and go to our catch.
                    // If the input-string is EMPTY, then 'parseDate' will NOT throw an exception, but simply return null!
                    var typedDate = $.datepicker.parseDate($(this).datepicker('option', 'dateFormat'), $(this).val());

                    // typedDate will be null if the entered string is empty. Throwing an exception will force the datepicker to
                    // reset to the last set default date.
                    // You may want to just leave the input-field empty, in which case you should replace 'throw "No date selected";' with 'return;'
                    if (typedDate == null)throw "No date selected";

                    // We do a manual check to see if the date is within minDate and maxDate, if they are defined.
                    // If all goes well, the default date is set to the new date, and datepicker will apply the date for us.
                    var minDate = $(this).datepicker("option", "minDate");
                    var maxDate = $(this).datepicker("option", "maxDate");
                    if (minDate !== null && typedDate < minDate) throw "Date is lower than minDate!";
                    if (maxDate !== null && typedDate > maxDate) throw "Date is higher than maxDate!";

                    // We update the default date, because the date seems valid.
                    // We do not need to manually update the input-field, as datepicker has already done this automatically.
                    $(this).datepicker('option', 'defaultDate', typedDate);
                }
                catch (err) {
                    console.log("onClose: " + err);
                    // Standard behavior is that datepicker does nothing to fix the value of the input field, until you choose
                    // a new valid date, by clicking on a day.
                    // Instead, we set the current date, as well as the value of the input-field, to the last selected (and
                    // accepted/validated) date from the datepicker, by getting its default date. This only works, because
                    // we manually change the default date of the datepicker whenever a new date is selected, in both 'beforeShow'
                    // and 'onClose'.
                    var date = $(this).datepicker('option', 'defaultDate');
                    $(this).val($.datepicker.formatDate($(this).datepicker('option', 'dateFormat'), date));
                    $(this).datepicker('setDate', date);
                }
            },

            beforeShow: function (input, inst) {
                // beforeShow is particularly irritating when initializing the input-field with a date-string.
                // The date-string will be parsed, and used to set the currently selected date in the datepicker.
                // BUT, if it is outside the scope of the minDate and maxDate, the text in the input-field is not
                // automatically updated, only the internal selected date, until you choose a new date (or, because
                // of our onClose function, whenever you click close or click outside the datepicker).
                // We want the input-field to always show the date that is currently chosen in our datepicker,
                // so we do some checks to see if it needs updating. This may not catch ALL cases, but these are
                // the primary ones: invalid date-format; date is too early; date is too late.
                try {
                    // If datepicker can parse the date using our formatstring, the instance will automatically parse
                    // and apply it for us (after the onClose is done).
                    // If the input-string is invalid, 'parseDate' will throw an exception, and go to our catch.
                    // If the input-string is EMPTY, then 'parseDate' will NOT throw an exception, but simply return null!
                    var typedDate = $.datepicker.parseDate($(this).datepicker('option', 'dateFormat'), $(this).val());

                    // typedDate will be null if the entered string is empty. Throwing an exception will force the datepicker to
                    // reset to the last set default date.
                    // You may want to just leave the input-field empty, in which case you should replace 'throw "No date selected";' with 'return;'
                    if (typedDate == null)throw "No date selected";

                    // We do a manual check to see if the date is within minDate and maxDate, if they are defined.
                    // If all goes well, the default date is set to the new date, and datepicker will apply the date for us.
                    var minDate = $(this).datepicker("option", "minDate");
                    var maxDate = $(this).datepicker("option", "maxDate");
                    if (minDate !== null && typedDate < minDate) throw "Date is lower than minDate!";
                    if (maxDate !== null && typedDate > maxDate) throw "Date is higher than maxDate!";

                    // We update the input-field, and the default date, because the date seems valid.
                    // We also manually update the input-field, as datepicker does not automatically do this when opened.
                    $(this).val($.datepicker.formatDate($(this).datepicker('option', 'dateFormat'), typedDate));
                    $(this).datepicker('option', 'defaultDate', typedDate);
                }
                catch (err) {
                    // Standard behavior is that datepicker does nothing to fix the value of the input field, until you choose
                    // a new valid date, by clicking on a day.
                    // We want the same behavior when opening the datepicker, so we set the current date, as well as the value
                    // of the input-field, to the last selected (and accepted/validated) date from the datepicker, by getting
                    // its default date. This only works, because we manually change the default date of the datepicker whenever
                    // a new date is selected, in both 'beforeShow' and 'onClose', AND have a default date set in the datepicker options.
                    var date = $(this).datepicker('option', 'defaultDate');
                    $(this).val($.datepicker.formatDate($(this).datepicker('option', 'dateFormat'), date));
                    $(this).datepicker('setDate', date);
                }
            }
        })
    //.after( // this makes a link labeled "clear" appear to the right of the input-field, which clears the text in it
    //    $("<a href='javascript: void(0);'>clear</a>").click(function() {
    //        $(this).prev().val('');
    //    })
    //)
    ;

एक महीने का जोड़

जिस महीने में आप महीने का उपयोग करना चाहते हैं, उस महीने में ppicker.js फ़ाइल और monthpicker.css फ़ाइल शामिल करें।

मासिकपतन तात्कालिकता इस महीने के समय से प्राप्त मूल्य, हमेशा चयनित महीने का पहला दिन होता है। वर्तमान महीने में शुरू होता है, और 100 साल पहले और भविष्य में 10 साल तक होता है।

    $('#MyMonthTextBox').monthpicker({
        dateFormat: 'MM yy',
        changeMonth: true,
        changeYear: true,
        showMonthAfterYear: true,
        showAnim: "drop",
        constrainInput: true,
        yearRange: "-100Y:+10Y",
        minDate: new Date(new Date().getFullYear() - 100, new Date().getMonth(), 1),
        maxDate: new Date((new Date().getFullYear() + 10), new Date().getMonth(), 1),
        defaultDate: new Date(new Date().getFullYear(), new Date().getMonth(), 1),

        // Monthpicker functions
        onClose: function (dateText, inst) {
            var date = new Date(inst.selectedYear, inst.selectedMonth, 1);
            $(this).monthpicker('option', 'defaultDate', date);
            $(this).monthpicker('setDate', date);
        },

        beforeShow: function (input, inst) {
            if ($(this).monthpicker("getDate") !== null) {
                // Making sure that the date set is the first of the month.
                if($(this).monthpicker("getDate").getDate() !== 1){
                    var date = new Date(inst.selectedYear, inst.selectedMonth, 1);
                    $(this).monthpicker('option', 'defaultDate', date);
                    $(this).monthpicker('setDate', date);
                }
            } else {
                // If the date is null, we reset it to the defaultDate. Make sure that the defaultDate is always set to the first of the month!
                $(this).monthpicker('setDate', $(this).monthpicker('option', 'defaultDate'));
            }
        },
        // Special monthpicker function!
        onChangeMonthYear: function (year, month, inst) {
            $(this).val($.monthpicker.formatDate($(this).monthpicker('option', 'dateFormat'), new Date(year, month - 1, 1)));
        }
    })
    //.after( // this makes a link labeled "clear" appear to the right of the input-field, which clears the text in it
    //    $("<a href='javascript: void(0);'>clear</a>").click(function() {
    //        $(this).prev().val('');
    //    })
    //)
    ;

बस! बस, आपको एक महीना बनाने की जरूरत है।

मैं इस के साथ एक jsfiddle काम करने के लिए प्रतीत नहीं कर सकता, लेकिन यह मेरे ASP.NET MVC प्रोजेक्ट में मेरे लिए काम कर रहा है। बस वही करें जो आप आम तौर पर अपने पेज में एक तारीख को जोड़ने के लिए करते हैं, और उपरोक्त लिपियों को शामिल करते हैं, संभवतः चयनकर्ता (मतलब $ ("# MyMonthTextBox") को आपके लिए काम करने वाली चीज़ में बदलकर।

मुझे उम्मीद है इससे किसी को सहायता मिलेगी।

कुछ अतिरिक्त तारीख- और महीनेवार सेटअप के लिए पास्टबिन के लिंक:

  1. महीने के आखिरी दिन काम करने वाला मंथिक । इस महीने में आपको जो तारीख मिलेगी वह हमेशा महीने का आखिरी दिन होगा।

  2. दो सहयोगी महीनेदार ; 'आरंभ' महीने के पहले दिन पर काम कर रहा है, और महीने के आखिरी में 'अंत' काम कर रहा है। वे दोनों एक-दूसरे द्वारा प्रतिबंधित हैं, इसलिए 'प्रारंभ' पर एक महीने का चयन करना जो 'शुरू' पर चयनित महीने से पहले है, उसी महीने 'अंत' के रूप में होने के लिए 'प्रारंभ' को बदल देगा। और इसके विपरीत। वैकल्पिक: 'प्रारंभ' पर एक महीने का चयन करते समय, 'अंत' पर 'मिनटडेट' उस महीने पर सेट किया जाता है। इस सुविधा को हटाने के लिए, ऑनक्लास में एक पंक्ति पर टिप्पणी करें (टिप्पणियों को पढ़ें)।

  3. दो सहयोगी खजूर ; वे दोनों एक-दूसरे द्वारा प्रतिबंधित हैं, इसलिए 'प्रारंभ' पर एक तारीख का चयन करना जो 'आरंभ' पर चयनित तिथि से पहले है, 'प्रारंभ' को उसी महीने 'अंत' के रूप में बदल देगा। और इसके विपरीत। वैकल्पिक: 'प्रारंभ' पर एक तारीख का चयन करते समय, 'अंत' पर 'मिनटडेट' उस तिथि पर सेट किया जाता है। इस सुविधा को हटाने के लिए, ऑनक्लास में एक पंक्ति पर टिप्पणी करें (टिप्पणियों को पढ़ें)।


मैं एक महीने में होने वाले DatePicker में कैसे बदल गया

मैंने jquery-ui-1.11.1.js से सभी जावास्क्रिप्ट कोड अपनी तिथि-तिथि से संबंधित ले लिए हैं, इसे एक नई js-file में चिपकाया है, और निम्नलिखित तारों को बदल दिया है:

  • "डेटपिकर" ==> "मासपिकर"
  • "डेटपिकर" ==> "मंथिक्कर"
  • "तिथि पिकर" ==> "माह पिकर"
  • "तिथि पिकर" ==> "महीना पिकर"

फिर मैंने फॉर-लूप के उस हिस्से को हटा दिया जो पूरे ui-datepicker-Calendar div (div जो अन्य समाधान CSS को छिपाता है) बनाता है। यह _generateHTML: function (inst) में पाया जा सकता है।

वह रेखा ज्ञात करें जो कहती है:

"</div><table class='ui-datepicker-calendar'><thead>" +

डिव-टैगिंग बंद करने के बाद और (और इसमें शामिल नहीं होने पर ) उस पंक्ति को चिह्नित करें, जहां वह कहती है:

drawMonth++;

अब यह दुखी होगा क्योंकि हमें कुछ चीजों को बंद करने की जरूरत है। पहले से Div- टैग को बंद करने के बाद, इसे जोड़ें:

";

कोड को अब अच्छी तरह से एक साथ सीम किया जाना चाहिए। यहाँ एक कोड-स्निपेट दिखाया गया है जिसे आपको समाप्त करना चाहिए:

...other code...

calender += "<div class='ui-monthpicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
                (/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
                (/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
                this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
                    row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
                "</div>";
            drawMonth++;
            if (drawMonth > 11) {
                drawMonth = 0;
                drawYear++;
            }

...other code...

तब मैंने jquery-ui.css से कोड को कॉपी / पेस्ट किया, जो एक नई सीएसएस-फ़ाइल में डेटपेकर से संबंधित है, और निम्न स्ट्रिंग्स को बदल दिया है:

  • "डेटपिकर" ==> "मासपिकर"

3

तारीख के लिए jQueryUI.com खोदने के बाद, यहाँ मेरा निष्कर्ष है और आपके प्रश्न का उत्तर है।

पहले, मैं आपके सवाल पर नहीं कहूंगा । आप केवल महीने और वर्ष लेने के लिए jQueryUI तारीख का उपयोग नहीं कर सकते। यह समर्थित नहीं है। इसका कोई कॉलबैक फ़ंक्शन नहीं है।

लेकिन आप इसे दिनों और दिनों को छिपाने के लिए सीएसएस का उपयोग करके केवल महीने और साल को प्रदर्शित करने के लिए हैक कर सकते हैं , और मुझे लगता है कि इससे कोई मतलब नहीं होगा कि आपको तारीख चुनने के लिए तारीखों पर क्लिक करने की आवश्यकता है।

मैं कह सकता हूं कि आपको बस एक और डेटकिपर का उपयोग करना होगा। जैसा रोजर ने सुझाया था।


3

मुझे महीने पिकर के साथ डेट पिकर की समस्या थी। मैंने उसे ऐसे ही हल किया।

    $('.monthpicker').focus(function()
    {
    $(".ui-datepicker-calendar").show();
    }).datepicker( {
        changeMonth: true,
        changeYear: true,
        showButtonPanel: true,
        dateFormat: 'MM/yy',
        create: function (input, inst) { 

         },
        onClose: function(dateText, inst) { 
            var month = 1+parseInt($("#ui-datepicker-div .ui-datepicker-month :selected").val());           
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();

        }
    });

3

अगर किसी को भी कई कैलेंडर के लिए यह बहुत मुश्किल नहीं है कि इस समारोह jquery यूआई को जोड़ने के लिए। निम्न के लिए खोज की गई:

x+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&C==0?c?f:n:"")+(

एक्स के सामने यह जोड़ें

var accl = ''; if(this._get(a,"justMonth")) {accl = ' ui-datepicker-just_month';}

निम्न को खोजें

<table class="ui-datepicker-calendar

और इसके साथ बदलें

<table class="ui-datepicker-calendar'+accl+'

के लिए भी खोजें

this._defaults={

से बदल दो

this._defaults={justMonth:false,

सीएसएस के लिए आपको उपयोग करना चाहिए:

.ui-datepicker table.ui-datepicker-just_month{
    display: none;
}

उसके बाद सब किया जाता है बस अपने वांछित डेटपिट init फ़ंक्शन पर जाएं और सेटिंग var प्रदान करें

$('#txt_month_chart_view').datepicker({
    changeMonth: true,
        changeYear: true,
        showButtonPanel: true,
        dateFormat: 'MM yy',
        justMonth: true,
        create: function(input, inst) {
            $(".ui-datepicker table").addClass("badbad");
        },
        onClose: function(dateText, inst) {
            var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            $(this).datepicker('setDate', new Date(year, month, 1));
        }
});

justMonth: true यहाँ कुंजी है :)


2

Waht के बारे में: http://www.mattkruse.com/javascript/calendarpopup/

महीने का चयन करें उदाहरण चुनें


जैसा कि मैं पहले से ही jquery datepicker का उपयोग कर रहा हूं, मैं इसका उपयोग करना पसंद करता हूं या मैन्युअल रूप से महीने और वर्ष का निर्माण करता हूं।
अन्नू

2

ऊपर ब्रायन की लगभग सही प्रतिक्रिया के लिए कुछ परिशोधन किए:

  1. मैंने शो पर सेट मान को फिर से लिखा है क्योंकि मुझे लगता है कि यह वास्तव में इस मामले में थोड़ा अधिक पठनीय बनाता है (हालांकि ध्यान दें कि मैं थोड़ा अलग प्रारूप का उपयोग कर रहा हूं)

  2. मेरे मुवक्किल को कोई कैलेंडर नहीं चाहिए था, इसलिए मैंने किसी अन्य तिथि-सूची को प्रभावित किए बिना ऐसा करने के लिए शो / हिडेन क्लास जोड़ दिया। कक्षा का निष्कासन एक टाइमर पर होता है ताकि टेबल बैक अप से बच जाए क्योंकि डेटपिकर बाहर निकलता है, जो IE में बहुत ध्यान देने योग्य लगता है।

EDIT: इसके साथ हल करने के लिए बची हुई एक समस्या यह है कि डेटपिकर को खाली करने का कोई तरीका नहीं है - फ़ील्ड को साफ़ करें और दूर क्लिक करें और यह चयनित तिथि के साथ फिर से खुलता है।

EDIT2: मैं इसे अच्छी तरह से हल करने में कामयाब नहीं हुआ हूं (यानी इनपुट के बगल में एक अलग स्पष्ट बटन जोड़े बिना), इसलिए इसका उपयोग करते हुए समाप्त हो गया: https://github.com/thebrowser/jquery.ui.monthpicker - यदि कोई भी कर सकता है ऐसा करने के लिए मानक UI प्राप्त करें जो आश्चर्यजनक होगा।

    $('.typeof__monthpicker').datepicker({
        dateFormat: 'mm/yy',
        showButtonPanel:true,
        beforeShow: 
            function(input, dpicker)
            {                           
                if(/^(\d\d)\/(\d\d\d\d)$/.exec($(this).val()))
                {
                    var d = new Date(RegExp.$2, parseInt(RegExp.$1, 10) - 1, 1);

                    $(this).datepicker('option', 'defaultDate', d);
                    $(this).datepicker('setDate', d);
                }

                $('#ui-datepicker-div').addClass('month_only');
            },
        onClose: 
            function(dt, dpicker)
            {
                setTimeout(function() { $('#ui-datepicker-div').removeClass('month_only') }, 250);

                var m = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
                var y = $("#ui-datepicker-div .ui-datepicker-year :selected").val();

                $(this).datepicker('setDate', new Date(y, m, 1));
            }
    });

आपको इस शैली नियम की भी आवश्यकता है:

#ui-datepicker-div.month_only .ui-datepicker-calendar {
display:none
}

2

मुझे @ user1857829 उत्तर पसंद आया और उनका "विस्तार-jquery-like-a-plugin approach"। मैंने सिर्फ एक लिट्टी संशोधन किया है ताकि जब आप किसी भी तरह से महीने या साल को बदल दें तो पिकर वास्तव में क्षेत्र में तारीख लिख दे। मैंने पाया कि मैं इसे थोड़ा उपयोग करने के बाद उस व्यवहार को पसंद करूंगा।

jQuery.fn.monthYearPicker = function(options) {
  options = $.extend({
    dateFormat: "mm/yy",
    changeMonth: true,
    changeYear: true,
    showButtonPanel: true,
    showAnim: "",
    onChangeMonthYear: writeSelectedDate
  }, options);
  function writeSelectedDate(year, month, inst ){
   var thisFormat = jQuery(this).datepicker("option", "dateFormat");
   var d = jQuery.datepicker.formatDate(thisFormat, new Date(year, month-1, 1));
   inst.input.val(d);
  }
  function hideDaysFromCalendar() {
    var thisCalendar = $(this);
    jQuery('.ui-datepicker-calendar').detach();
    // Also fix the click event on the Done button.
    jQuery('.ui-datepicker-close').unbind("click").click(function() {
      var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
      var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
      thisCalendar.datepicker('setDate', new Date(year, month, 1));
      thisCalendar.datepicker("hide");
    });
  }
  jQuery(this).datepicker(options).focus(hideDaysFromCalendar);
}

2

मुझे स्वीकृत उत्तर के साथ कुछ कठिनाइयाँ हैं और किसी अन्य को आधार के रूप में न्यूनतम प्रयास के साथ इस्तेमाल नहीं किया जा सकता है। इसलिए, मैंने स्वीकार किए गए उत्तर के नवीनतम संस्करण को तब तक मोड़ने का फैसला किया जब तक कि वह कम से कम न्यूनतम जेएस कोडिंग / पुन: प्रयोज्य मानकों को पूरा नहीं करता।

यहाँ बेन Koehler के स्वीकृत उत्तर के तीसरे (नवीनतम) संस्करण की तुलना में एक तरह से अधिक स्वच्छ समाधान है । इसके अलावा, यह होगा:

  • न केवल mm/yyप्रारूप के साथ , बल्कि ओपी सहित किसी अन्य के साथ काम करें MM yy
  • पृष्ठ पर अन्य तारीखों के कैलेंडर को न छिपाएं।
  • परोक्ष साथ वैश्विक जे एस वस्तु को दूषित नहीं datestr, month, yearआदि चर।

इसकी जांच - पड़ताल करें:

$('.date-picker').datepicker({
    dateFormat: 'MM yy',
    changeMonth: true,
    changeYear: true,
    showButtonPanel: true,
    onClose: function (dateText, inst) {
        var isDonePressed = inst.dpDiv.find('.ui-datepicker-close').hasClass('ui-state-hover');
        if (!isDonePressed)
            return;

        var month = inst.dpDiv.find('.ui-datepicker-month').find(':selected').val(),
            year = inst.dpDiv.find('.ui-datepicker-year').find(':selected').val();

        $(this).datepicker('setDate', new Date(year, month, 1)).change();
        $('.date-picker').focusout();
    },
    beforeShow: function (input, inst) {
        var $this = $(this),
            // For the simplicity we suppose the dateFormat will be always without the day part, so we
            // manually add it since the $.datepicker.parseDate will throw if the date string doesn't contain the day part
            dateFormat = 'd ' + $this.datepicker('option', 'dateFormat'),
            date;

        try {
            date = $.datepicker.parseDate(dateFormat, '1 ' + $this.val());
        } catch (ex) {
            return;
        }

        $this.datepicker('option', 'defaultDate', date);
        $this.datepicker('setDate', date);

        inst.dpDiv.addClass('datepicker-month-year');
    }
});

और आपको जो कुछ भी चाहिए वह निम्नलिखित सीएसएस के आसपास कहीं है:

.datepicker-month-year .ui-datepicker-calendar {
    display: none;
}

बस। आशा है कि उपरोक्त आगे के पाठकों के लिए कुछ समय बचाएगा।


1
बस और FYI करें। लाइन 'inst.dpDiv.addClass (' तिथि-माह-वर्ष ');) पूरे महीने-साल को डेट-कैपर के कैलेंडर डिव में जोड़ देगा, मतलब, अगर डेटपिकर के साथ अन्य डेट फ़ील्ड हैं, तो वे उस वजह से काम करना बंद कर देंगे। चूंकि कैलेंडर के लिए केवल एक ही div है, इसलिए '$' ('। डेट-महीना-माह-वर्ष') जोड़ना दिलचस्प होगा। RemoveClass ('datepicker-year-year'); ' किसी भी अन्य तिथि-निर्धारण पर पहले के प्रयोग से जिसे पारंपरिक कैलेंडर की आवश्यकता होती है। या, जब आप फोकस खो दें तो क्लास को हटा दें। लेकिन मुझे इससे संबंधित कुछ भी नहीं मिला
जॉनी बिगोडे

1
यह पूर्ण उत्तर है जिसका उपयोग सभी को करना चाहिए। मेरे लिए सबसे बड़ी समस्या थी डेट एंट्री पॉपअप हमेशा वर्तमान माह और वर्ष के लिए चूक, चाहे जो भी हो उसमें पहले से ही। इस जवाब ने इसे ठीक कर दिया।
एलेक्स एफ

1

मुझे पता है कि यह थोड़ी देर की प्रतिक्रिया है, लेकिन मुझे कुछ दिन पहले भी यही समस्या हुई थी और मैं एक अच्छा और आसान समाधान लेकर आया हूं। पहले मुझे यहां यह शानदार डेट पिकर मिला

फिर मैंने अभी CSS क्लास (jquery.calendarPicker.css) को अपडेट किया है जो इस तरह के उदाहरण के साथ आता है:

.calMonth {
  /*border-bottom: 1px dashed #666;
  padding-bottom: 5px;
  margin-bottom: 5px;*/
}

.calDay 
{
    display:none;
}

जब आप कुछ भी बदलते हैं, तो प्लगइन एक घटना की तारीख बदल देता है, इसलिए इससे कोई फर्क नहीं पड़ता कि आप एक दिन पर क्लिक नहीं कर रहे हैं (और यह एक वर्ष और महीने के पिकर के रूप में अच्छा है)

आशा है ये मदद करेगा!



1

मैंने यहां दिए गए विभिन्न समाधानों की कोशिश की और वे ठीक काम करते हैं यदि आप बस एक-दो बूंद नीचे चाहते हैं।

यहाँ सुझाया गया सबसे अच्छा (दिखने में) 'पिकर' ( https://github.com/thebrowser/jquery.ui.monthpicker ) मूल रूप से _ggateateHTML rewritten के साथ jquery-ui datepicker के पुराने संस्करण की एक प्रति है। हालाँकि, मैंने पाया कि यह वर्तमान jquery-ui (1.10.2) के साथ अच्छी तरह से नहीं खेलता है और अन्य मुद्दे थे (esc पर बंद नहीं होता है, अन्य विजेट खोलने पर बंद नहीं होता है, हार्डकोड शैली है)।

उस तारीख को ठीक करने के प्रयास के बजाय और नवीनतम तारीख के साथ उसी प्रक्रिया को फिर से लिखने के बजाय, मैं मौजूदा तारीख पिकर के प्रासंगिक भागों में हुकिंग के साथ गया।

इसमें ओवरराइडिंग शामिल है:

  • _generateHTML (माह पिकर मार्कअप बनाने के लिए)
  • ParseDate (जैसा कि यह तब पसंद नहीं करता है जब कोई दिन घटक न हो),
  • _selectDay (जैसे डेटपिकर उपयोग करता है .html () दिन का मान प्राप्त करने के लिए)

जैसा कि यह प्रश्न थोड़ा पुराना है और पहले से ही अच्छी तरह से उत्तर दिया गया है, यहां केवल _selectDay ओवरराइड यह दिखाने के लिए है कि यह कैसे किया गया था:

jQuery.datepicker._base_parseDate = jQuery.datepicker._base_parseDate || jQuery.datepicker.parseDate;
jQuery.datepicker.parseDate = function (format, value, settings) {
    if (format != "M y") return jQuery.datepicker._hvnbase_parseDate(format, value, settings);
    // "M y" on parse gives error as doesn't have a day value, so 'hack' it by simply adding a day component
    return jQuery.datepicker._hvnbase_parseDate("d " + format, "1 " + value, settings);
};

जैसा कि कहा गया है, यह एक पुराना प्रश्न है, लेकिन मुझे यह उपयोगी लगा, इसलिए मैं एक परिवर्तनकारी समाधान के साथ प्रतिक्रिया जोड़ना चाहता था।


0

एक महीने के लिए, JQuery v 1.7.2 का उपयोग करते हुए, मेरे पास निम्नलिखित जावास्क्रिप्ट है जो कि बस कर रहा है

$l("[id$=txtDtPicker]").monthpicker({
showOn: "both",
buttonImage: "../../images/Calendar.png",
buttonImageOnly: true,
pattern: 'yyyymm', // Default is 'mm/yyyy' and separator char is not mandatory
monthNames: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez']
});


0

बेन Koehler समाधान के लिए धन्यवाद।

हालांकि, मुझे डेटपर्स के कई उदाहरणों के साथ एक समस्या थी, जिनमें से कुछ को दिन के चयन के साथ आवश्यक था। बेन कोहलर का समाधान (संपादन 3 में) काम करता है, लेकिन सभी उदाहरणों में दिन के चयन को छिपाता है। यहाँ एक अद्यतन है जो इस समस्या को हल करता है:

$('.date-picker').datepicker({
    dateFormat: "mm/yy",
    changeMonth: true,
    changeYear: true,
    showButtonPanel: true,
    onClose: function(dateText, inst) {
        if($('#ui-datepicker-div').html().indexOf('ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all ui-state-hover') > -1) {
            $(this).datepicker(
                'setDate',
                new Date(
                    $("#ui-datepicker-div .ui-datepicker-year :selected").val(),
                    $("#ui-datepicker-div .ui-datepicker-month :selected").val(),
                    1
                )
            ).trigger('change');
            $('.date-picker').focusout();
        }
        $("#ui-datepicker-div").removeClass("month_year_datepicker");
    },
    beforeShow : function(input, inst) {
        if((datestr = $(this).val()).length > 0) {
            year = datestr.substring(datestr.length-4, datestr.length);
            month = datestr.substring(0, 2);
            $(this).datepicker('option', 'defaultDate', new Date(year, month-1, 1));
            $(this).datepicker('setDate', new Date(year, month-1, 1));
            $("#ui-datepicker-div").addClass("month_year_datepicker");
        }
    }
});

-2

onSelectकॉल बैक का उपयोग करें और मैन्युअल रूप से वर्ष भाग निकालें और पाठ को मैन्युअल रूप से फ़ील्ड में सेट करें


3
मुझे लगता है कि आप सवाल नहीं पढ़ रहे हैं। Aanu "माह और वर्ष (मई 2010) प्रदर्शित करना चाहता है न कि कैलेंडर"।
रीगेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.